▍ humdrum codex / custard v0.3.0
license AGPL-3.0
2.0 KB raw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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)
			}
		})
	}
}