internal/ci/paths_test.go

v1.35.1
gitbay/internal/ci/paths_test.go history · blame · raw

79 lines · 2428 bytes

 1package ci
 2
 3import "testing"
 4
 5func TestMatch(t *testing.T) {
 6	cases := []struct {
 7		pattern, file string
 8		want          bool
 9	}{
10		{".gitbay/wiki/**", ".gitbay/wiki/Home.md", true},
11		{".gitbay/wiki/**", ".gitbay/wiki/sub/Page.md", true}, // nested: the case a reader assumes works
12		{".gitbay/wiki/**", ".gitbay/wiki", true},
13		{".gitbay/wiki/**", "other/Home.md", false},
14		{"*.md", "README.md", true},
15		{"*.md", "docs/README.md", false},
16		{"docs/*.md", "docs/a.md", true},
17		{"docs/*.md", "docs/sub/a.md", false},
18	}
19	for _, c := range cases {
20		if got := Match(c.pattern, c.file); got != c.want {
21			t.Errorf("Match(%q, %q) = %v, want %v", c.pattern, c.file, got, c.want)
22		}
23	}
24}
25
26func TestSelected(t *testing.T) {
27	cases := []struct {
28		name  string
29		job   Job
30		files []string
31		want  bool
32	}{
33		{"paths hit", Job{Paths: []string{"src/**"}}, []string{"src/x.go"}, true},
34		{"paths miss", Job{Paths: []string{"src/**"}}, []string{"docs/x.md"}, false},
35		{"paths-ignore covers every file", Job{PathsIgnore: []string{"docs/**"}},
36			[]string{"docs/a.md", "docs/b.md"}, false},
37		{"paths-ignore covers some files", Job{PathsIgnore: []string{"docs/**"}},
38			[]string{"docs/a.md", "src/x.go"}, true},
39		{"neither key", Job{}, []string{"anything.txt"}, true},
40	}
41	for _, c := range cases {
42		if got := Selected(c.job, c.files); got != c.want {
43			t.Errorf("%s: Selected() = %v, want %v", c.name, got, c.want)
44		}
45	}
46}
47
48func TestHasDiffBase(t *testing.T) {
49	cases := []struct {
50		old  string
51		want bool
52	}{
53		{"", false},
54		{"0000000000000000000000000000000000000000", false},
55		{"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", true},
56	}
57	for _, c := range cases {
58		if got := HasDiffBase(c.old); got != c.want {
59			t.Errorf("HasDiffBase(%q) = %v, want %v", c.old, got, c.want)
60		}
61	}
62}
63
64func TestParsePaths(t *testing.T) {
65	raw := []byte("jobs:\n  unit:\n    steps:\n      - echo hi\n    paths:\n      - src/**\n    paths-ignore:\n      - docs/**\n")
66	jobs, err := Parse(raw)
67	if err != nil {
68		t.Fatalf("Parse: %v", err)
69	}
70	if len(jobs) != 1 || len(jobs[0].Paths) != 1 || jobs[0].Paths[0] != "src/**" ||
71		len(jobs[0].PathsIgnore) != 1 || jobs[0].PathsIgnore[0] != "docs/**" {
72		t.Fatalf("Parse did not round-trip paths: %+v", jobs)
73	}
74
75	bad := []byte("jobs:\n  unit:\n    steps:\n      - echo hi\n    paths:\n      - \"[\"\n")
76	if _, err := Parse(bad); err == nil {
77		t.Fatal("Parse accepted a malformed path pattern")
78	}
79}