package server import ( "testing" "custard/internal/release" ) func TestCouldBeRelease(t *testing.T) { yes := []string{"refs/tags/v1.2.3", "refs/heads/release/v1.2.3", "refs/heads/rel/v0.1.0"} no := []string{"refs/heads/main", "refs/heads/feature/x", "refs/tags/nightly", "refs/heads/release/main"} for _, r := range yes { if !couldBeRelease(r) { t.Errorf("couldBeRelease(%q) = false, want true", r) } } for _, r := range no { if couldBeRelease(r) { t.Errorf("couldBeRelease(%q) = true, want false", r) } } } func cfgWith(source, prefix string) release.RepoConfig { var c release.RepoConfig c.Brew.Enabled = true c.Brew.Source = source c.Brew.BookmarkPrefix = prefix return c } func TestReleasePlan(t *testing.T) { cases := []struct { name, source, prefix, ref string wantArchive, wantVer string wantSkip bool }{ {"tag mode tag", release.SourceTag, "", "refs/tags/v1.2.3", "v1.2.3", "v1.2.3", false}, {"tag mode ignores branch", release.SourceTag, "", "refs/heads/release/v1.2.3", "", "", true}, {"tag mode non-semver tag", release.SourceTag, "", "refs/tags/nightly", "", "", true}, {"bookmark mode branch", release.SourceBookmark, "", "refs/heads/release/v1.2.3", "release/v1.2.3", "v1.2.3", false}, {"bookmark mode custom prefix", release.SourceBookmark, "rel/", "refs/heads/rel/v0.1.0", "rel/v0.1.0", "v0.1.0", false}, {"bookmark mode ignores tag", release.SourceBookmark, "", "refs/tags/v1.2.3", "", "", true}, {"bookmark mode wrong prefix", release.SourceBookmark, "", "refs/heads/foo/v1.2.3", "", "", true}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { archive, ver, skip := releasePlan(cfgWith(c.source, c.prefix), c.ref) if (skip != "") != c.wantSkip { t.Fatalf("skip = %q, wantSkip=%v", skip, c.wantSkip) } if !c.wantSkip && (archive != c.wantArchive || ver != c.wantVer) { t.Errorf("got archive=%q ver=%q; want %q %q", archive, ver, c.wantArchive, c.wantVer) } }) } }