9d845c8899
- backend moved to backend directory - added and initialized frontend with vue - moved infrastructure files to infra directory
107 lines
1.8 KiB
Go
107 lines
1.8 KiB
Go
package config_test
|
|
|
|
import (
|
|
"FamilyHub/src/config"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type EnvFixture struct {
|
|
backup map[string]string
|
|
}
|
|
|
|
func NewEnvFixture() *EnvFixture {
|
|
env := make(map[string]string)
|
|
|
|
for _, e := range os.Environ() {
|
|
pair := split(e)
|
|
env[pair[0]] = pair[1]
|
|
}
|
|
|
|
// полностью чистое окружение
|
|
os.Clearenv()
|
|
return &EnvFixture{backup: env}
|
|
}
|
|
|
|
func (e *EnvFixture) Restore() {
|
|
os.Clearenv()
|
|
for key, val := range e.backup {
|
|
_ = os.Setenv(key, val)
|
|
}
|
|
}
|
|
|
|
func split(s string) [2]string {
|
|
var p [2]string
|
|
for i := 0; i < len(s); i++ {
|
|
if s[i] == '=' {
|
|
p[0] = s[:i]
|
|
p[1] = s[i+1:]
|
|
return p
|
|
}
|
|
}
|
|
return p
|
|
}
|
|
|
|
func MustSet(env map[string]string) {
|
|
for k, v := range env {
|
|
_ = os.Setenv(k, v)
|
|
}
|
|
}
|
|
|
|
func MustUnset(keys ...string) {
|
|
for _, k := range keys {
|
|
_ = os.Unsetenv(k)
|
|
}
|
|
}
|
|
|
|
func TestConfigLoad_Table(t *testing.T) {
|
|
env := NewEnvFixture()
|
|
defer env.Restore()
|
|
|
|
tests := []struct {
|
|
name string
|
|
env map[string]string
|
|
want config.Config
|
|
error bool
|
|
}{
|
|
{
|
|
name: "ok - values set",
|
|
env: map[string]string{"BOT_TOKEN": "abc", "DB_PATH": "db.sqlite"},
|
|
want: config.Config{BotToken: "abc", DBConnectionString: "db.sqlite"},
|
|
},
|
|
{
|
|
name: "fail - missing token",
|
|
env: map[string]string{}, // ничего нет
|
|
error: true,
|
|
},
|
|
{
|
|
name: "default DB path applied",
|
|
env: map[string]string{"BOT_TOKEN": "xyz"},
|
|
error: true,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
testCase := tc
|
|
t.Run(testCase.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
os.Clearenv()
|
|
MustSet(testCase.env)
|
|
|
|
cfg, err := config.Load()
|
|
|
|
if testCase.error {
|
|
assert.Error(t, err)
|
|
return
|
|
}
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, testCase.want.BotToken, cfg.BotToken)
|
|
assert.Equal(t, testCase.want.DBConnectionString, cfg.DBConnectionString)
|
|
})
|
|
}
|
|
}
|