(Feat): Initial Commit
This commit is contained in:
278
internal/util/env_test.go
Normal file
278
internal/util/env_test.go
Normal file
@@ -0,0 +1,278 @@
|
||||
package util_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"allaboutapps.dev/aw/go-starter/internal/util"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
func TestGetEnv(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_STRING"
|
||||
res := util.GetEnv(testVarKey, "noVal")
|
||||
assert.Equal(t, "noVal", res)
|
||||
|
||||
t.Setenv(testVarKey, "string")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnv(testVarKey, "noVal")
|
||||
assert.Equal(t, "string", res)
|
||||
}
|
||||
|
||||
func TestGetEnvEnum(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_ENUM"
|
||||
|
||||
panicFunc := func() {
|
||||
_ = util.GetEnvEnum(testVarKey, "smtp", []string{"mock", "foo"})
|
||||
}
|
||||
assert.Panics(t, panicFunc)
|
||||
|
||||
res := util.GetEnvEnum(testVarKey, "smtp", []string{"mock", "smtp"})
|
||||
assert.Equal(t, "smtp", res)
|
||||
|
||||
t.Setenv(testVarKey, "mock")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvEnum(testVarKey, "smtp", []string{"mock", "smtp"})
|
||||
assert.Equal(t, "mock", res)
|
||||
|
||||
t.Setenv(testVarKey, "foo")
|
||||
res = util.GetEnvEnum(testVarKey, "smtp", []string{"mock", "smtp"})
|
||||
assert.Equal(t, "smtp", res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsInt(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_INT"
|
||||
res := util.GetEnvAsInt(testVarKey, 1)
|
||||
assert.Equal(t, 1, res)
|
||||
|
||||
t.Setenv(testVarKey, "2")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsInt(testVarKey, 1)
|
||||
assert.Equal(t, 2, res)
|
||||
|
||||
t.Setenv(testVarKey, "3x")
|
||||
res = util.GetEnvAsInt(testVarKey, 1)
|
||||
assert.Equal(t, 1, res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsUint32(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_UINT32"
|
||||
res := util.GetEnvAsUint32(testVarKey, 1)
|
||||
assert.Equal(t, uint32(1), res)
|
||||
|
||||
t.Setenv(testVarKey, "2")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsUint32(testVarKey, 1)
|
||||
assert.Equal(t, uint32(2), res)
|
||||
|
||||
t.Setenv(testVarKey, "3x")
|
||||
res = util.GetEnvAsUint32(testVarKey, 1)
|
||||
assert.Equal(t, uint32(1), res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsUint8(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_UINT8"
|
||||
res := util.GetEnvAsUint8(testVarKey, 1)
|
||||
assert.Equal(t, uint8(1), res)
|
||||
|
||||
t.Setenv(testVarKey, "2")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsUint8(testVarKey, 1)
|
||||
assert.Equal(t, uint8(2), res)
|
||||
|
||||
t.Setenv(testVarKey, "3x")
|
||||
res = util.GetEnvAsUint8(testVarKey, 1)
|
||||
assert.Equal(t, uint8(1), res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsBool(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_BOOL"
|
||||
res := util.GetEnvAsBool(testVarKey, true)
|
||||
assert.True(t, res)
|
||||
|
||||
t.Setenv(testVarKey, "f")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsBool(testVarKey, true)
|
||||
assert.False(t, res)
|
||||
|
||||
t.Setenv(testVarKey, "0")
|
||||
res = util.GetEnvAsBool(testVarKey, true)
|
||||
assert.False(t, res)
|
||||
|
||||
t.Setenv(testVarKey, "false")
|
||||
res = util.GetEnvAsBool(testVarKey, true)
|
||||
assert.False(t, res)
|
||||
|
||||
t.Setenv(testVarKey, "3x")
|
||||
res = util.GetEnvAsBool(testVarKey, true)
|
||||
assert.True(t, res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsURL(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_URL"
|
||||
testURL, err := url.Parse("https://allaboutapps.at/")
|
||||
require.NoError(t, err)
|
||||
|
||||
panicFunc := func() {
|
||||
_ = util.GetEnvAsURL(testVarKey, "%")
|
||||
}
|
||||
assert.Panics(t, panicFunc)
|
||||
|
||||
res := util.GetEnvAsURL(testVarKey, "https://allaboutapps.at/")
|
||||
assert.Equal(t, *testURL, *res)
|
||||
|
||||
t.Setenv(testVarKey, "https://allaboutapps.at/")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsURL(testVarKey, "foo")
|
||||
assert.Equal(t, *testURL, *res)
|
||||
|
||||
t.Setenv(testVarKey, "%")
|
||||
panicFunc = func() {
|
||||
_ = util.GetEnvAsURL(testVarKey, "https://allaboutapps.at/")
|
||||
}
|
||||
assert.Panics(t, panicFunc)
|
||||
}
|
||||
|
||||
func TestGetEnvAsStringArr(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_STRING_ARR"
|
||||
testVal := []string{"a", "b", "c"}
|
||||
res := util.GetEnvAsStringArr(testVarKey, testVal)
|
||||
assert.Equal(t, testVal, res)
|
||||
|
||||
t.Setenv(testVarKey, "1,2")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsStringArr(testVarKey, testVal)
|
||||
assert.Equal(t, []string{"1", "2"}, res)
|
||||
|
||||
t.Setenv(testVarKey, "")
|
||||
res = util.GetEnvAsStringArr(testVarKey, testVal)
|
||||
assert.Equal(t, testVal, res)
|
||||
|
||||
t.Setenv(testVarKey, "a, b, c")
|
||||
res = util.GetEnvAsStringArr(testVarKey, testVal)
|
||||
assert.Equal(t, []string{"a", " b", " c"}, res)
|
||||
|
||||
t.Setenv(testVarKey, "a|b|c")
|
||||
res = util.GetEnvAsStringArr(testVarKey, testVal, "|")
|
||||
assert.Equal(t, []string{"a", "b", "c"}, res)
|
||||
|
||||
t.Setenv(testVarKey, "a,b,c")
|
||||
res = util.GetEnvAsStringArr(testVarKey, testVal, "|")
|
||||
assert.Equal(t, []string{"a,b,c"}, res)
|
||||
|
||||
t.Setenv(testVarKey, "a||b||c")
|
||||
res = util.GetEnvAsStringArr(testVarKey, testVal, "||")
|
||||
assert.Equal(t, []string{"a", "b", "c"}, res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsStringArrTrimmed(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_STRING_ARR_TRIMMED"
|
||||
testVal := []string{"a", "b", "c"}
|
||||
|
||||
t.Setenv(testVarKey, "a, b, c")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res := util.GetEnvAsStringArrTrimmed(testVarKey, testVal)
|
||||
assert.Equal(t, []string{"a", "b", "c"}, res)
|
||||
|
||||
t.Setenv(testVarKey, "a, b,c ")
|
||||
res = util.GetEnvAsStringArrTrimmed(testVarKey, testVal)
|
||||
assert.Equal(t, []string{"a", "b", "c"}, res)
|
||||
|
||||
t.Setenv(testVarKey, " a || b || c ")
|
||||
res = util.GetEnvAsStringArrTrimmed(testVarKey, testVal, "||")
|
||||
assert.Equal(t, []string{"a", "b", "c"}, res)
|
||||
}
|
||||
|
||||
func TestGetMgmtSecret(t *testing.T) {
|
||||
rs, err := util.GenerateRandomHexString(8)
|
||||
require.NoError(t, err)
|
||||
|
||||
key := fmt.Sprintf("WE_WILL_NEVER_USE_THIS_MGMT_SECRET_%s", rs)
|
||||
expectedVal := fmt.Sprintf("SUPER_SECRET_%s", rs)
|
||||
|
||||
t.Setenv(key, expectedVal)
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
val := util.GetMgmtSecret(key)
|
||||
assert.Equal(t, expectedVal, val)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetEnvAsLanguageTag(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_LANG"
|
||||
res := util.GetEnvAsLanguageTag(testVarKey, language.German)
|
||||
assert.Equal(t, language.German, res)
|
||||
|
||||
t.Setenv(testVarKey, "en")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsLanguageTag(testVarKey, language.German)
|
||||
assert.Equal(t, language.English, res)
|
||||
}
|
||||
|
||||
func TestGetEnvAsLanguageTagArr(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_LANG_ARR"
|
||||
testVal := []language.Tag{language.German, language.English, language.Spanish}
|
||||
res := util.GetEnvAsLanguageTagArr(testVarKey, testVal)
|
||||
assert.Equal(t, testVal, res)
|
||||
|
||||
t.Setenv(testVarKey, "de,en")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsLanguageTagArr(testVarKey, testVal)
|
||||
assert.Equal(t, []language.Tag{language.German, language.English}, res)
|
||||
|
||||
t.Setenv(testVarKey, "")
|
||||
res = util.GetEnvAsLanguageTagArr(testVarKey, testVal)
|
||||
assert.Equal(t, testVal, res)
|
||||
|
||||
t.Setenv(testVarKey, "en|es")
|
||||
res = util.GetEnvAsLanguageTagArr(testVarKey, testVal, "|")
|
||||
assert.Equal(t, []language.Tag{language.English, language.Spanish}, res)
|
||||
|
||||
t.Setenv(testVarKey, "en||es")
|
||||
res = util.GetEnvAsLanguageTagArr(testVarKey, testVal, "||")
|
||||
assert.Equal(t, []language.Tag{language.English, language.Spanish}, res)
|
||||
}
|
||||
|
||||
func TestGetMgmtSecretRandom(t *testing.T) {
|
||||
expectedVal := util.GetMgmtSecret("DOES_NOT_EXIST_MGMT_SECRET")
|
||||
require.NotEmpty(t, expectedVal)
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
val := util.GetMgmtSecret("DOES_NOT_EXIST_MGMT_SECRET")
|
||||
assert.Equal(t, expectedVal, val)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetEnvAsLocation(t *testing.T) {
|
||||
testVarKey := "TEST_ONLY_FOR_UNIT_TEST_LOCATION"
|
||||
res := util.GetEnvAsLocation(testVarKey, "UTC")
|
||||
assert.Equal(t, time.UTC, res)
|
||||
|
||||
t.Setenv(testVarKey, "Local")
|
||||
defer os.Unsetenv(testVarKey)
|
||||
res = util.GetEnvAsLocation(testVarKey, "UTC")
|
||||
assert.Equal(t, time.Local, res)
|
||||
|
||||
vienna, err := time.LoadLocation("Europe/Vienna")
|
||||
require.NoError(t, err)
|
||||
t.Setenv(testVarKey, "Europe/Vienna")
|
||||
res = util.GetEnvAsLocation(testVarKey, "UTC")
|
||||
assert.Equal(t, vienna, res)
|
||||
|
||||
panicFunc := func() {
|
||||
t.Setenv(testVarKey, "")
|
||||
_ = util.GetEnvAsLocation(testVarKey, "not-valud")
|
||||
}
|
||||
assert.Panics(t, panicFunc)
|
||||
|
||||
panicFunc = func() {
|
||||
t.Setenv(testVarKey, "not-valid")
|
||||
_ = util.GetEnvAsLocation(testVarKey, "UTC")
|
||||
}
|
||||
assert.Panics(t, panicFunc)
|
||||
}
|
||||
Reference in New Issue
Block a user