package config import ( "log/slog" "testing" ) func TestLoadDefaults(t *testing.T) { clearConfigEnv(t) cfg, err := Load() if err != nil { t.Fatalf("Load() error = %v", err) } if cfg.AppEnv != "development" { t.Fatalf("AppEnv = %q, want development", cfg.AppEnv) } if cfg.LogLevel != slog.LevelInfo { t.Fatalf("LogLevel = %v, want info", cfg.LogLevel) } if cfg.BackendAddr != ":8080" { t.Fatalf("BackendAddr = %q, want :8080", cfg.BackendAddr) } if cfg.ConsoleProxyAddr != ":8081" { t.Fatalf("ConsoleProxyAddr = %q, want :8081", cfg.ConsoleProxyAddr) } if cfg.WorkerConcurrency != 5 { t.Fatalf("WorkerConcurrency = %d, want 5", cfg.WorkerConcurrency) } if cfg.RedisAddr != "localhost:6379" { t.Fatalf("RedisAddr = %q, want localhost:6379", cfg.RedisAddr) } } func TestLoadOverrides(t *testing.T) { clearConfigEnv(t) t.Setenv("APP_ENV", "test") t.Setenv("LOG_LEVEL", "debug") t.Setenv("BACKEND_ADDR", ":9000") t.Setenv("CONSOLE_PROXY_ADDR", ":9001") t.Setenv("WORKER_CONCURRENCY", "12") t.Setenv("REDIS_ADDR", "redis:6379") t.Setenv("MASTER_KEY_BASE64", "test-key") cfg, err := Load() if err != nil { t.Fatalf("Load() error = %v", err) } if cfg.AppEnv != "test" { t.Fatalf("AppEnv = %q, want test", cfg.AppEnv) } if cfg.LogLevel != slog.LevelDebug { t.Fatalf("LogLevel = %v, want debug", cfg.LogLevel) } if cfg.BackendAddr != ":9000" { t.Fatalf("BackendAddr = %q, want :9000", cfg.BackendAddr) } if cfg.ConsoleProxyAddr != ":9001" { t.Fatalf("ConsoleProxyAddr = %q, want :9001", cfg.ConsoleProxyAddr) } if cfg.WorkerConcurrency != 12 { t.Fatalf("WorkerConcurrency = %d, want 12", cfg.WorkerConcurrency) } if cfg.RedisAddr != "redis:6379" { t.Fatalf("RedisAddr = %q, want redis:6379", cfg.RedisAddr) } if cfg.MasterKeyBase64 != "test-key" { t.Fatalf("MasterKeyBase64 = %q, want test-key", cfg.MasterKeyBase64) } } func TestLoadRejectsInvalidLogLevel(t *testing.T) { clearConfigEnv(t) t.Setenv("LOG_LEVEL", "trace") if _, err := Load(); err == nil { t.Fatal("Load() error = nil, want error") } } func TestLoadRejectsInvalidWorkerConcurrency(t *testing.T) { clearConfigEnv(t) t.Setenv("WORKER_CONCURRENCY", "0") if _, err := Load(); err == nil { t.Fatal("Load() error = nil, want error") } } func clearConfigEnv(t *testing.T) { t.Helper() for _, key := range []string{ "APP_ENV", "LOG_LEVEL", "BACKEND_ADDR", "CONSOLE_PROXY_ADDR", "WORKER_CONCURRENCY", "DATABASE_URL", "DATABASE_DIRECT_URL", "SUPABASE_URL", "SUPABASE_JWKS_URL", "SUPABASE_ISSUER", "SUPABASE_JWT_SECRET", "REDIS_ADDR", "APP_SITE_URL", "MASTER_KEY_BASE64", } { t.Setenv(key, "") } }