Go · 2680 bytes Raw Blame History
1 // SPDX-License-Identifier: AGPL-3.0-or-later
2
3 package checks
4
5 import (
6 "testing"
7
8 checksdb "github.com/tenseleyFlow/shithub/internal/checks/sqlc"
9 )
10
11 // run constructs a CheckRun with just the fields the rollup looks at.
12 func run(status string, conclusion string) checksdb.CheckRun {
13 r := checksdb.CheckRun{Status: checksdb.CheckStatus(status)}
14 if conclusion != "" {
15 r.Conclusion = checksdb.NullCheckConclusion{
16 CheckConclusion: checksdb.CheckConclusion(conclusion),
17 Valid: true,
18 }
19 }
20 return r
21 }
22
23 func TestDeriveSuiteRollup(t *testing.T) {
24 t.Parallel()
25 cases := []struct {
26 name string
27 runs []checksdb.CheckRun
28 wantStatus string
29 wantConcl string
30 }{
31 {
32 "empty → queued",
33 nil,
34 "queued", "",
35 },
36 {
37 "all queued → queued",
38 []checksdb.CheckRun{run("queued", ""), run("queued", "")},
39 "queued", "",
40 },
41 {
42 "one in_progress → in_progress",
43 []checksdb.CheckRun{run("queued", ""), run("in_progress", "")},
44 "in_progress", "",
45 },
46 {
47 "all completed success → success",
48 []checksdb.CheckRun{run("completed", "success"), run("completed", "success")},
49 "completed", "success",
50 },
51 {
52 "any failure → failure",
53 []checksdb.CheckRun{run("completed", "success"), run("completed", "failure")},
54 "completed", "failure",
55 },
56 {
57 "failure beats timed_out",
58 []checksdb.CheckRun{run("completed", "timed_out"), run("completed", "failure")},
59 "completed", "failure",
60 },
61 {
62 "timed_out beats cancelled beats action_required",
63 []checksdb.CheckRun{run("completed", "cancelled"), run("completed", "timed_out"), run("completed", "action_required")},
64 "completed", "timed_out",
65 },
66 {
67 "all neutral → neutral (no successes)",
68 []checksdb.CheckRun{run("completed", "neutral"), run("completed", "neutral")},
69 "completed", "neutral",
70 },
71 {
72 "success beats neutral",
73 []checksdb.CheckRun{run("completed", "success"), run("completed", "neutral")},
74 "completed", "success",
75 },
76 {
77 "all skipped → skipped",
78 []checksdb.CheckRun{run("completed", "skipped"), run("completed", "skipped")},
79 "completed", "skipped",
80 },
81 {
82 "all stale → stale",
83 []checksdb.CheckRun{run("completed", "stale")},
84 "completed", "stale",
85 },
86 {
87 "completed without conclusion → completed/neutral fallback",
88 []checksdb.CheckRun{run("completed", "")},
89 "completed", "neutral",
90 },
91 }
92 for _, c := range cases {
93 t.Run(c.name, func(t *testing.T) {
94 gotStatus, gotConcl := DeriveSuiteRollup(c.runs)
95 if gotStatus != c.wantStatus || gotConcl != c.wantConcl {
96 t.Errorf("got (%s, %s), want (%s, %s)", gotStatus, gotConcl, c.wantStatus, c.wantConcl)
97 }
98 })
99 }
100 }
101