package app import ( "strings" "testing" "time" ) func setRequiredConfigEnvironment(t *testing.T, scheme string) { t.Helper() t.Setenv("TAPM_PUBLIC_URL", scheme+"://broker.example.com") t.Setenv("TAPM_GITEA_URL", scheme+"://git.example.com") t.Setenv("TAPM_GITEA_CLIENT_ID", "client-id") t.Setenv("TAPM_GITEA_CLIENT_SECRET", "client-secret") t.Setenv("TAPM_GITEA_PACKAGE_USERNAME", "reader") t.Setenv("TAPM_GITEA_PACKAGE_TOKEN", "reader-token") t.Setenv("TAPM_GITEA_PACKAGE_WRITE_USERNAME", "writer") t.Setenv("TAPM_GITEA_PACKAGE_WRITE_TOKEN", "writer-token") t.Setenv("TAPM_COOKIE_SECRET", "0123456789abcdef0123456789abcdef") } func TestConfigRejectsHTTPByDefault(t *testing.T) { setRequiredConfigEnvironment(t, "http") _, err := LoadConfig() if err == nil || !strings.Contains(err.Error(), "absolute HTTPS URL") { t.Fatalf("LoadConfig() error = %v, want HTTPS requirement", err) } } func TestConfigAllowsExplicitHTTPTestingMode(t *testing.T) { setRequiredConfigEnvironment(t, "http") t.Setenv("TAPM_ALLOW_INSECURE_HTTP", "true") cfg, err := LoadConfig() if err != nil { t.Fatal(err) } if cfg.CookieSecure { t.Fatal("HTTP testing mode unexpectedly enabled secure cookies") } } func TestHTTPSConfigUsesSecureCookies(t *testing.T) { setRequiredConfigEnvironment(t, "https") cfg, err := LoadConfig() if err != nil { t.Fatal(err) } if !cfg.CookieSecure { t.Fatal("HTTPS mode did not enable secure cookies") } if got := cfg.GiteaInternalURL.String(); got != "http://gitea:3000" { t.Fatalf("GiteaInternalURL = %q, want private Compose URL", got) } } func TestConfigAcceptsExplicitInternalGiteaURL(t *testing.T) { setRequiredConfigEnvironment(t, "https") t.Setenv("TAPM_GITEA_INTERNAL_URL", "http://gitea-test:3000") cfg, err := LoadConfig() if err != nil { t.Fatal(err) } if got := cfg.GiteaInternalURL.String(); got != "http://gitea-test:3000" { t.Fatalf("GiteaInternalURL = %q, want configured private URL", got) } } func TestConfigAcceptsDayBasedAuthorizationDuration(t *testing.T) { setRequiredConfigEnvironment(t, "https") t.Setenv("TAPM_DEFAULT_DURATION", "7d") cfg, err := LoadConfig() if err != nil { t.Fatal(err) } if cfg.DefaultDuration != 7*24*time.Hour { t.Fatalf("DefaultDuration = %s, want 7 days", cfg.DefaultDuration) } } func TestConfigKeepsLegacyHourDurationCompatibility(t *testing.T) { setRequiredConfigEnvironment(t, "https") t.Setenv("TAPM_DEFAULT_DURATION", "3h") cfg, err := LoadConfig() if err != nil { t.Fatal(err) } if cfg.DefaultDuration != 3*time.Hour { t.Fatalf("DefaultDuration = %s, want 3 hours", cfg.DefaultDuration) } }