package config import "testing" func TestLoadDefaults(t *testing.T) { // Ensure no ambient values leak into the test. for _, k := range []string{ "EMAIL_AGENT_ENV", "EMAIL_AGENT_ADDR", "EMAIL_AGENT_PORT", "EMAIL_AGENT_DB_PATH", "EMAIL_AGENT_LOG_LEVEL", "EMAIL_AGENT_PUBLIC_BASE_URL", } { t.Setenv(k, "") } cfg, err := Load() if err != nil { t.Fatalf("Load() error = %v", err) } if cfg.Port != DefaultPort { t.Errorf("Port = %d, want %d", cfg.Port, DefaultPort) } if cfg.Addr != DefaultAddr { t.Errorf("Addr = %q, want %q", cfg.Addr, DefaultAddr) } if cfg.Env != DefaultEnv { t.Errorf("Env = %q, want %q", cfg.Env, DefaultEnv) } if cfg.DBPath != DefaultDB { t.Errorf("DBPath = %q, want %q", cfg.DBPath, DefaultDB) } } func TestLoadOverrides(t *testing.T) { t.Setenv("EMAIL_AGENT_ENV", "production") t.Setenv("EMAIL_AGENT_PORT", "9000") t.Setenv("EMAIL_AGENT_DB_PATH", "/tmp/custom.db") t.Setenv("EMAIL_AGENT_LOG_LEVEL", "debug") t.Setenv("EMAIL_AGENT_PUBLIC_BASE_URL", "https://example.test/") t.Setenv("EMAIL_AGENT_ADDR", "") cfg, err := Load() if err != nil { t.Fatalf("Load() error = %v", err) } if cfg.Port != 9000 { t.Errorf("Port = %d, want 9000", cfg.Port) } if cfg.Addr != ":9000" { t.Errorf("Addr = %q, want %q", cfg.Addr, ":9000") } if !cfg.IsProduction() { t.Errorf("IsProduction() = false, want true") } if cfg.PublicBaseURL != "https://example.test" { t.Errorf("PublicBaseURL = %q, want trimmed URL", cfg.PublicBaseURL) } } func TestLoadInvalidPort(t *testing.T) { t.Setenv("EMAIL_AGENT_PORT", "not-a-number") t.Setenv("EMAIL_AGENT_ADDR", "") if _, err := Load(); err == nil { t.Fatal("Load() error = nil, want error for invalid port") } } func TestLoadInvalidEnv(t *testing.T) { t.Setenv("EMAIL_AGENT_ENV", "staging") t.Setenv("EMAIL_AGENT_ADDR", "") if _, err := Load(); err == nil { t.Fatal("Load() error = nil, want error for invalid env") } }