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  }