github.com/abolfazlbeh/zhycan@v0.0.0-20230819144214-24cf38237387/internal/config/manager_test.go (about)

     1  package config
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestCreateManager(t *testing.T) {
    10  	err := createManager()
    11  	if err != nil {
    12  		t.Errorf("There is an error in creating manager: %v", err)
    13  	}
    14  }
    15  
    16  func TestAllModuleIsInitialized(t *testing.T) {
    17  	err := createManager()
    18  	if err == nil {
    19  		time.Sleep(2 * time.Second)
    20  
    21  		expectedFlag := true
    22  		actualFlag := GetManager().IsInitialized()
    23  		if expectedFlag != actualFlag {
    24  			t.Errorf("Manager initialization status --> expected: %v, got %v", expectedFlag, actualFlag)
    25  		} else {
    26  			expectedInitializedModules := []string{"logger"}
    27  			actualInitializedModules := GetManager().GetAllInitializedModuleList()
    28  			if !reflect.DeepEqual(actualInitializedModules, expectedInitializedModules) {
    29  				t.Errorf("Config Initialized Modules --> expected: %v, got %v", expectedInitializedModules, actualInitializedModules)
    30  			}
    31  		}
    32  	}
    33  }
    34  
    35  func TestGetWrapperInstance(t *testing.T) {
    36  	err := createManager()
    37  	if err == nil {
    38  		time.Sleep(3 * time.Second)
    39  
    40  		expectedWrapper := &ViperWrapper{
    41  			ConfigPath:          []string{"../../configs/test/"},
    42  			ConfigName:          "logger",
    43  			ConfigEnvPrefix:     "",
    44  			ConfigResourcePlace: "",
    45  		}
    46  		_ = expectedWrapper.Load()
    47  
    48  		actualWrapper, err := GetManager().GetConfigWrapper("logger")
    49  		if err != nil {
    50  			t.Errorf("Get Warpper Object --> Got Error --> Expected: %v, but got, %v", nil, err)
    51  		}
    52  
    53  		if !reflect.DeepEqual(expectedWrapper, actualWrapper) {
    54  			t.Errorf("Get Warpper Object --> Expected: %v, but got %v", expectedWrapper, actualWrapper)
    55  		}
    56  	}
    57  }
    58  
    59  func TestGetDifferentConfigs(t *testing.T) {
    60  	expectedValues := []struct {
    61  		key         string
    62  		expectedVal interface{}
    63  	}{
    64  		{key: "type", expectedVal: "zap"},
    65  		{key: "typ2", expectedVal: KeyNotExistErr{
    66  			Key: "typ2", Category: "logger",
    67  		}},
    68  	}
    69  
    70  	err := createManager()
    71  	if err != nil {
    72  		t.Errorf("Creating Config Manager Caused Error --> Expected: %v, but got %v", nil, err)
    73  	}
    74  
    75  	actualVal, _ := GetManager().Get("logger", expectedValues[0].key)
    76  	if expectedValues[0].expectedVal != actualVal {
    77  		t.Errorf("Get the key for the `type` --> Expected: %v, got %v", expectedValues[0].expectedVal, actualVal)
    78  	}
    79  
    80  	_, err = GetManager().Get("logger", expectedValues[1].key)
    81  	if reflect.DeepEqual(expectedValues[1].expectedVal, err) {
    82  		t.Errorf("Get the key for the `type` --> Expected: %v, got %v", expectedValues[1].expectedVal, err)
    83  	}
    84  }
    85  
    86  func TestManager_ManualLoadConfig(t *testing.T) {
    87  	err := createManager()
    88  	if err != nil {
    89  		t.Errorf("Creating Config Manager Caused Error --> Expected: %v, but got %v", nil, err)
    90  	}
    91  
    92  	// add logger to the manager
    93  	err = GetManager().ManualLoadConfig("/tmp/", "zh")
    94  	if err != nil {
    95  		t.Errorf("Manual loading config file --> Expected: %v, but got %v", nil, err)
    96  	}
    97  
    98  	expectedValue := "founded"
    99  	val, err := GetManager().Get("zh", "test")
   100  	if err != nil {
   101  		t.Errorf("Get config value from manual file the key is `test`, got error --> Expected: %v, but got %v", nil, err)
   102  	}
   103  
   104  	if !reflect.DeepEqual(expectedValue, val) {
   105  		t.Errorf("Expected the value of key `test` to be `%v`, but got `%v`", expectedValue, val)
   106  	}
   107  }
   108  
   109  func createManager() error {
   110  	path := "../.."
   111  	initialMode := "test"
   112  	prefix := "ZHYCAN"
   113  
   114  	return CreateManager(path, initialMode, prefix)
   115  }