github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/config/config_test.go (about) 1 package config 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path" 7 "strings" 8 "testing" 9 10 "github.com/ngocphuongnb/tetua/app/test" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 const sampleConfigContent = `{ 15 "app_env": "testing", 16 "app_key": "app_key_test", 17 "app_token_key": "app_token_key_test", 18 "app_port": "3001", 19 "app_theme": "test_theme", 20 "app_base_url": "http://localhost:3001", 21 "cookie_uuid": "test_uuid", 22 "db_dsn": "root:123@tcp(127.0.0.1:3306)/tetua", 23 "github_client_id": "github_client_id_test", 24 "github_client_secret": "github_client_secret_test", 25 "show_tetua_block": true, 26 "db_query_logging": true, 27 "storage": { 28 "default_disk": "local_public_test", 29 "disks": [ 30 { 31 "name": "local_public_test", 32 "driver": "local", 33 "root": "./public/storage", 34 "base_url": "http://localhost:3001" 35 }, 36 { 37 "name": "local_public_test", 38 "driver": "local", 39 "root": "./public/storage", 40 "base_url": "http://localhost:3001" 41 }, 42 { 43 "name": "local_private_test", 44 "driver": "local", 45 "root": "./private/storage" 46 }, 47 { 48 "name": "s3_public_test", 49 "driver": "s3", 50 "root": "/files", 51 "provider": "DigitalOcean", 52 "endpoint": "ams3.digitaloceanspaces.com", 53 "region": "ams3", 54 "bucket": "", 55 "access_key_id": "", 56 "secret_access_key": "" 57 } 58 ] 59 } 60 }` 61 62 func createCustomWorkingDir(configContent string) string { 63 workingDir := test.CreateDir("app-") 64 configFile := path.Join(workingDir, "config.json") 65 66 if err := ioutil.WriteFile(configFile, []byte(configContent), 0644); err != nil { 67 panic(err) 68 } 69 70 return workingDir 71 } 72 73 func TestConfigInitEmptyAppKey(t *testing.T) { 74 workingDir := createCustomWorkingDir(strings.ReplaceAll(sampleConfigContent, "app_key_test", "")) 75 APP_KEY = "" 76 os.Setenv("APP_KEY ", "") 77 defer test.RecoverPanic(t, "APP_KEY is not set, please set it in config.json or setting the environment variable.\n") 78 defer os.RemoveAll(workingDir) 79 80 Init(workingDir) 81 } 82 83 func TestConfigInitEmptyDBDsn(t *testing.T) { 84 workingDir := createCustomWorkingDir(strings.ReplaceAll(sampleConfigContent, "root:123@tcp(127.0.0.1:3306)/tetua", "")) 85 DB_DSN = "" 86 os.Setenv("DB_DSN ", "") 87 defer test.RecoverPanic(t, "DB_DSN is not set, please set it in config.json or setting the environment variable.\n") 88 defer os.RemoveAll(workingDir) 89 90 Init(workingDir) 91 } 92 93 func TestConfigInit(t *testing.T) { 94 workingDir := createCustomWorkingDir(sampleConfigContent) 95 defer os.RemoveAll(workingDir) 96 97 os.Setenv("APP_ENV", "development") 98 Init(workingDir) 99 assert.Equal(t, settings, defaultSettings) 100 assert.Equal(t, workingDir, WD) 101 assert.Equal(t, "development", APP_ENV) 102 assert.Equal(t, true, DEVELOPMENT) 103 } 104 105 func TestParseConfigFileFailed(t *testing.T) { 106 defer test.RecoverPanic(t, "unexpected end of JSON input") 107 WD = createCustomWorkingDir("") 108 defer os.RemoveAll(WD) 109 parseConfigFile() 110 } 111 112 func TestParseConfigFile(t *testing.T) { 113 WD = createCustomWorkingDir(sampleConfigContent) 114 defer os.RemoveAll(WD) 115 parseConfigFile() 116 117 assert.Equal(t, "testing", APP_ENV) 118 assert.Equal(t, "3001", APP_PORT) 119 assert.Equal(t, "root:123@tcp(127.0.0.1:3306)/tetua", DB_DSN) 120 assert.Equal(t, "app_key_test", APP_KEY) 121 assert.Equal(t, "app_token_key_test", APP_TOKEN_KEY) 122 assert.Equal(t, "test_theme", APP_THEME) 123 assert.Equal(t, "test_uuid", COOKIE_UUID) 124 assert.Equal(t, true, SHOW_TETUA_BLOCK) 125 assert.Equal(t, true, DB_QUERY_LOGGING) 126 assert.Equal(t, 5, len(STORAGES.DiskConfigs)) 127 assert.Equal(t, "local_public_test", STORAGES.DiskConfigs[2].Name) 128 assert.Equal(t, "local_private_test", STORAGES.DiskConfigs[3].Name) 129 assert.Equal(t, "s3_public_test", STORAGES.DiskConfigs[4].Name) 130 assert.Equal(t, "/files", STORAGES.DiskConfigs[0].BaseUrlFn()) 131 } 132 133 func TestParseEnv(t *testing.T) { 134 os.Setenv("APP_ENV", "env_development") 135 os.Setenv("APP_PORT", "3002") 136 os.Setenv("DB_DSN", "env_root:123@tcp") 137 os.Setenv("APP_KEY", "env_app_key_test") 138 os.Setenv("APP_TOKEN_KEY", "env_app_token_key_test") 139 os.Setenv("APP_THEME", "env_test_theme") 140 os.Setenv("COOKIE_UUID", "env_test_uuid") 141 os.Setenv("SHOW_TETUA_BLOCK", "true") 142 os.Setenv("DB_QUERY_LOGGING", "true") 143 144 parseENV() 145 146 assert.Equal(t, "env_development", APP_ENV) 147 assert.Equal(t, "3002", APP_PORT) 148 assert.Equal(t, "env_root:123@tcp", DB_DSN) 149 assert.Equal(t, "env_app_key_test", APP_KEY) 150 assert.Equal(t, "env_app_token_key_test", APP_TOKEN_KEY) 151 assert.Equal(t, "env_app_token_key_test", APP_TOKEN_KEY) 152 assert.Equal(t, "env_test_theme", APP_THEME) 153 assert.Equal(t, "env_test_uuid", COOKIE_UUID) 154 assert.Equal(t, true, SHOW_TETUA_BLOCK) 155 assert.Equal(t, true, DB_QUERY_LOGGING) 156 157 os.Setenv("SHOW_TETUA_BLOCK", "false") 158 os.Setenv("DB_QUERY_LOGGING", "false") 159 160 parseENV() 161 162 assert.Equal(t, false, SHOW_TETUA_BLOCK) 163 assert.Equal(t, false, DB_QUERY_LOGGING) 164 } 165 166 func TestUrl(t *testing.T) { 167 Settings([]*SettingItem{{Name: "app_base_url", Value: "http://localhost:3002"}}) 168 assert.Equal(t, "http://localhost:3002", Setting("app_base_url")) 169 } 170 171 func TestCreateConfigFile(t *testing.T) { 172 WD = test.CreateDir("app-") 173 defer os.RemoveAll(WD) 174 assert.Equal(t, nil, CreateConfigFile(WD)) 175 assert.Equal(t, nil, CreateConfigFile(WD)) 176 parseConfigFile() 177 178 assert.Equal(t, "production", APP_ENV) 179 assert.Equal(t, "3002", APP_PORT) 180 assert.Equal(t, true, DB_DSN != "") 181 }