package config import ( "os" "path/filepath" "testing" ) func TestEnvOrDefault(t *testing.T) { key := "SSATLAS_TEST_ENV_VAR" defer os.Unsetenv(key) if got := envOrDefault(key, "default"); got != "default" { t.Errorf("unset env: got %q, want default", got) } os.Setenv(key, "custom") if got := envOrDefault(key, "default"); got != "custom" { t.Errorf("set env: got %q, want custom", got) } os.Setenv(key, "") if got := envOrDefault(key, "default"); got != "default" { t.Errorf("empty env: got %q, want default", got) } } func TestLoadDefaults(t *testing.T) { // Clear env vars that Load uses envKeys := []string{ "PORT", "APP_URL", "AUTHELIA_URL", "STRIPE_SECRET_KEY", "STRIPE_WEBHOOK_SECRET", "STRIPE_PRICE_ID", "LLDAP_URL", "LLDAP_ADMIN_DN", "LLDAP_ADMIN_PASSWORD", "LLDAP_BASE_DN", "DOCKER_HOST", "TRAEFIK_DOMAIN", "TRAEFIK_NETWORK", "TEMPLATE_PATH", "CUSTOMER_DOMAIN", } for _, k := range envKeys { os.Unsetenv(k) } defer func() { for _, k := range envKeys { os.Unsetenv(k) } }() cfg := Load() tests := []struct { field string got string want string }{ {"Port", cfg.Port, "8080"}, {"AppURL", cfg.AppURL, "http://app.bc.a250.ca"}, {"AutheliaURL", cfg.AutheliaURL, "http://login.bc.a250.ca"}, {"LDAPUrl", cfg.LDAPUrl, "ldap://lldap_lldap:3890"}, {"LDAPAdminDN", cfg.LDAPAdminDN, "uid=admin,ou=people,dc=a250,dc=ca"}, {"LDAPBaseDN", cfg.LDAPBaseDN, "dc=a250,dc=ca"}, {"DockerHost", cfg.DockerHost, "unix:///var/run/docker.sock"}, { "TraefikDomain", cfg.TraefikDomain, "bc.a250.ca"}, {"TraefikNetwork", cfg.TraefikNetwork, "authelia_dev"}, {"TemplatePath", cfg.TemplatePath, "/app/templates"}, {"CustomerDomain", cfg.CustomerDomain, "app.a250.ca"}, } for _, tt := range tests { if tt.got != tt.want { t.Errorf("Load().%s = %q, want %q", tt.field, tt.got, tt.want) } } } func TestLoadFromEnv(t *testing.T) { os.Setenv("PORT", "9000") os.Setenv("TEMPLATE_PATH", "/custom/templates") defer os.Unsetenv("PORT") defer os.Unsetenv("TEMPLATE_PATH") cfg := Load() if cfg.Port != "9000" { t.Errorf("Port = %q, want 9000", cfg.Port) } if cfg.TemplatePath != "/custom/templates" { t.Errorf("TemplatePath = %q, want /custom/templates", cfg.TemplatePath) } } func TestLoadTemplatePathRelative(t *testing.T) { wd, _ := os.Getwd() relPath := filepath.Join(wd, "..", "..", "templates") os.Setenv("TEMPLATE_PATH", relPath) defer os.Unsetenv("TEMPLATE_PATH") cfg := Load() if cfg.TemplatePath != relPath { t.Errorf("TemplatePath = %q, want %q", cfg.TemplatePath, relPath) } }