internal/ci/paths_test.go
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}