@@ -0,0 +1,102 @@
|
||||
package config
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestLoad_MissingJWTSecret(t *testing.T) {
|
||||
t.Setenv("OMNEX_JWT_SECRET", "")
|
||||
if _, err := Load(); err == nil {
|
||||
t.Error("Load() error = nil, want error for missing OMNEX_JWT_SECRET")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_JWTSecretTooShort(t *testing.T) {
|
||||
t.Setenv("OMNEX_JWT_SECRET", "short")
|
||||
if _, err := Load(); err == nil {
|
||||
t.Error("Load() error = nil, want error for JWT secret < 32 bytes")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_DevDefaults(t *testing.T) {
|
||||
t.Setenv("OMNEX_JWT_SECRET", "12345678901234567890123456789012")
|
||||
t.Setenv("OMNEX_ENV", "")
|
||||
t.Setenv("OMNEX_DATABASE_URL", "")
|
||||
t.Setenv("OMNEX_REDIS_URL", "")
|
||||
|
||||
cfg, err := Load()
|
||||
if err != nil {
|
||||
t.Fatalf("Load() error = %v, want nil", err)
|
||||
}
|
||||
if cfg.Env != "dev" {
|
||||
t.Errorf("Env = %q, want %q", cfg.Env, "dev")
|
||||
}
|
||||
if cfg.Addr != ":8080" {
|
||||
t.Errorf("Addr = %q, want %q", cfg.Addr, ":8080")
|
||||
}
|
||||
if cfg.Secure() {
|
||||
t.Error("Secure() = true in dev, want false")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_ProdRequiresDatabaseAndRedis(t *testing.T) {
|
||||
t.Setenv("OMNEX_JWT_SECRET", "12345678901234567890123456789012")
|
||||
t.Setenv("OMNEX_ENV", "prod")
|
||||
t.Setenv("OMNEX_DATABASE_URL", "")
|
||||
t.Setenv("OMNEX_REDIS_URL", "")
|
||||
|
||||
if _, err := Load(); err == nil {
|
||||
t.Error("Load() error = nil, want error for prod without DATABASE_URL/REDIS_URL")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_ProdRequiresRedisEvenWithDatabase(t *testing.T) {
|
||||
t.Setenv("OMNEX_JWT_SECRET", "12345678901234567890123456789012")
|
||||
t.Setenv("OMNEX_ENV", "prod")
|
||||
t.Setenv("OMNEX_DATABASE_URL", "postgres://localhost/omnex")
|
||||
t.Setenv("OMNEX_REDIS_URL", "")
|
||||
|
||||
if _, err := Load(); err == nil {
|
||||
t.Error("Load() error = nil, want error for prod without REDIS_URL")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_ProdSucceedsWithAllRequired(t *testing.T) {
|
||||
t.Setenv("OMNEX_JWT_SECRET", "12345678901234567890123456789012")
|
||||
t.Setenv("OMNEX_ENV", "prod")
|
||||
t.Setenv("OMNEX_DATABASE_URL", "postgres://localhost/omnex")
|
||||
t.Setenv("OMNEX_REDIS_URL", "redis://localhost:6379/0")
|
||||
|
||||
cfg, err := Load()
|
||||
if err != nil {
|
||||
t.Fatalf("Load() error = %v, want nil", err)
|
||||
}
|
||||
if !cfg.Secure() {
|
||||
t.Error("Secure() = false in prod, want true")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSplitCSV(t *testing.T) {
|
||||
cases := []struct {
|
||||
in string
|
||||
want []string
|
||||
}{
|
||||
{"", nil},
|
||||
{"a", []string{"a"}},
|
||||
{"a,b,c", []string{"a", "b", "c"}},
|
||||
{"a,,c", []string{"a", "c"}},
|
||||
{"a,b,", []string{"a", "b"}},
|
||||
{",a,b", []string{"a", "b"}},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
got := splitCSV(tc.in)
|
||||
if len(got) != len(tc.want) {
|
||||
t.Errorf("splitCSV(%q) = %v, want %v", tc.in, got, tc.want)
|
||||
continue
|
||||
}
|
||||
for i := range got {
|
||||
if got[i] != tc.want[i] {
|
||||
t.Errorf("splitCSV(%q) = %v, want %v", tc.in, got, tc.want)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user