package manifest import ( "errors" "os" "path/filepath" "testing" ) func TestFindWalksParents(t *testing.T) { root := t.TempDir() manifestPath := filepath.Join(root, DefaultFile) if err := os.WriteFile(manifestPath, []byte("[update]\n"), 0o600); err != nil { t.Fatalf("WriteFile manifest: %v", err) } startDir := filepath.Join(root, "cmd", "graylog") if err := os.MkdirAll(startDir, 0o755); err != nil { t.Fatalf("MkdirAll startDir: %v", err) } got, err := Find(startDir) if err != nil { t.Fatalf("Find returned error: %v", err) } if got != manifestPath { t.Fatalf("Find = %q, want %q", got, manifestPath) } } func TestFindReturnsNotExistWhenMissing(t *testing.T) { _, err := Find(t.TempDir()) if err == nil { t.Fatal("expected error") } if !errors.Is(err, os.ErrNotExist) { t.Fatalf("error = %v, want os.ErrNotExist", err) } } func TestLoadParsesUpdateConfig(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, DefaultFile) const content = ` [update] source_name = " Gitea releases " base_url = "https://gitea.example.com/" latest_release_url = "https://gitea.example.com/api/releases/latest" token_header = " Authorization " token_env_names = [" GITEA_TOKEN ", "", "GITEA_RELEASE_TOKEN"] ` if err := os.WriteFile(path, []byte(content), 0o600); err != nil { t.Fatalf("WriteFile manifest: %v", err) } file, err := Load(path) if err != nil { t.Fatalf("Load returned error: %v", err) } source := file.Update.ReleaseSource() if source.Name != "Gitea releases" { t.Fatalf("source name = %q", source.Name) } if source.BaseURL != "https://gitea.example.com" { t.Fatalf("base URL = %q", source.BaseURL) } if source.LatestReleaseURL != "https://gitea.example.com/api/releases/latest" { t.Fatalf("latest release URL = %q", source.LatestReleaseURL) } if source.TokenHeader != "Authorization" { t.Fatalf("token header = %q", source.TokenHeader) } if len(source.TokenEnvNames) != 2 { t.Fatalf("token env names = %v", source.TokenEnvNames) } } func TestLoadDefaultFindsManifest(t *testing.T) { root := t.TempDir() path := filepath.Join(root, DefaultFile) if err := os.WriteFile(path, []byte("[update]\nlatest_release_url = \"https://example.com/latest\"\n"), 0o600); err != nil { t.Fatalf("WriteFile manifest: %v", err) } startDir := filepath.Join(root, "cmd", "tool") if err := os.MkdirAll(startDir, 0o755); err != nil { t.Fatalf("MkdirAll startDir: %v", err) } file, gotPath, err := LoadDefault(startDir) if err != nil { t.Fatalf("LoadDefault returned error: %v", err) } if gotPath != path { t.Fatalf("path = %q, want %q", gotPath, path) } if file.Update.LatestReleaseURL != "https://example.com/latest" { t.Fatalf("latest release URL = %q", file.Update.LatestReleaseURL) } } func TestLoadReturnsParseError(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, DefaultFile) if err := os.WriteFile(path, []byte("[update\n"), 0o600); err != nil { t.Fatalf("WriteFile manifest: %v", err) } _, err := Load(path) if err == nil { t.Fatal("expected error") } }