(Feat): Initial Commit
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled

This commit is contained in:
2026-07-03 19:41:31 +05:30
commit 7e940c83a7
461 changed files with 45002 additions and 0 deletions

278
internal/util/env_test.go Normal file
View 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)
}