You've already forked agentic-coding-workflow
feat(config): viper-based config loader with env + file + master key validation
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestLoad_FromEnv(t *testing.T) {
|
||||
t.Setenv("APP_ENV", "test")
|
||||
t.Setenv("APP_HTTP_ADDR", ":9090")
|
||||
t.Setenv("APP_DB_DSN", "postgres://test")
|
||||
t.Setenv("APP_MASTER_KEY", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff")
|
||||
t.Setenv("APP_DATA_DIR", "/tmp/acw")
|
||||
t.Setenv("APP_BOOTSTRAP_ADMIN_EMAIL", "a@b.c")
|
||||
t.Setenv("APP_BOOTSTRAP_ADMIN_PASSWORD", "pw12345678")
|
||||
|
||||
cfg, err := Load("")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "test", cfg.Env)
|
||||
require.Equal(t, ":9090", cfg.HTTP.Addr)
|
||||
require.Equal(t, "postgres://test", cfg.DB.DSN)
|
||||
require.Len(t, cfg.MasterKey, 32) // hex decoded → 32 bytes
|
||||
require.Equal(t, "/tmp/acw", cfg.DataDir)
|
||||
require.Equal(t, "a@b.c", cfg.Bootstrap.AdminEmail)
|
||||
}
|
||||
|
||||
func TestLoad_MissingMasterKey(t *testing.T) {
|
||||
os.Clearenv()
|
||||
t.Setenv("APP_DB_DSN", "x")
|
||||
_, err := Load("")
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "MASTER_KEY")
|
||||
}
|
||||
|
||||
func TestLoad_MasterKeyWrongLength(t *testing.T) {
|
||||
t.Setenv("APP_MASTER_KEY", "deadbeef") // too short
|
||||
t.Setenv("APP_DB_DSN", "x")
|
||||
_, err := Load("")
|
||||
require.Error(t, err)
|
||||
}
|
||||
Reference in New Issue
Block a user