package config import ( "strings" "testing" ) func TestLoadValid(t *testing.T) { t.Setenv("WOODPECKER_URL", "https://woodpecker.example.com/") t.Setenv("WOODPECKER_TOKEN", "secret") cfg, err := Load() if err != nil { t.Fatal(err) } if cfg.WoodpeckerURL != "https://woodpecker.example.com/" { t.Errorf("URL = %q", cfg.WoodpeckerURL) } if got := cfg.APIBaseURL(); got != "https://woodpecker.example.com/api" { t.Errorf("APIBaseURL = %q", got) } } func TestLoadMissingEnv(t *testing.T) { t.Setenv("WOODPECKER_URL", "") t.Setenv("WOODPECKER_TOKEN", "") if _, err := Load(); err == nil { t.Fatal("expected error when env is empty") } } func TestLoadInvalidURL(t *testing.T) { t.Setenv("WOODPECKER_URL", "not a url ://") t.Setenv("WOODPECKER_TOKEN", "secret") if _, err := Load(); err == nil { t.Fatal("expected error for invalid URL") } } func TestLoadNonHTTPURL(t *testing.T) { t.Setenv("WOODPECKER_URL", "ftp://woodpecker.example.com") t.Setenv("WOODPECKER_TOKEN", "secret") _, err := Load() if err == nil || !strings.Contains(err.Error(), "http or https") { t.Fatalf("expected scheme error, got %v", err) } } func TestLoadMissingToken(t *testing.T) { t.Setenv("WOODPECKER_URL", "https://woodpecker.example.com") t.Setenv("WOODPECKER_TOKEN", "") _, err := Load() if err == nil || !strings.Contains(err.Error(), "WOODPECKER_TOKEN") { t.Fatalf("expected token error, got %v", err) } }