@@ -11,6 +11,7 @@ import (
1111
1212func TestAggregateJobStatus (t * testing.T ) {
1313 testStatuses := func (expected Status , statuses []Status ) {
14+ t .Helper ()
1415 var jobs []* ActionRunJob
1516 for _ , v := range statuses {
1617 jobs = append (jobs , & ActionRunJob {Status : v })
@@ -29,6 +30,16 @@ func TestAggregateJobStatus(t *testing.T) {
2930 statuses []Status
3031 expected Status
3132 }{
33+ // unknown cases, maybe it shouldn't happen in real world
34+ {[]Status {}, StatusUnknown },
35+ {[]Status {StatusUnknown , StatusSuccess }, StatusUnknown },
36+ {[]Status {StatusUnknown , StatusSkipped }, StatusUnknown },
37+ {[]Status {StatusUnknown , StatusFailure }, StatusFailure },
38+ {[]Status {StatusUnknown , StatusCancelled }, StatusCancelled },
39+ {[]Status {StatusUnknown , StatusWaiting }, StatusWaiting },
40+ {[]Status {StatusUnknown , StatusRunning }, StatusRunning },
41+ {[]Status {StatusUnknown , StatusBlocked }, StatusBlocked },
42+
3243 // success with other status
3344 {[]Status {StatusSuccess }, StatusSuccess },
3445 {[]Status {StatusSuccess , StatusSkipped }, StatusSuccess }, // skipped doesn't affect success
@@ -38,18 +49,28 @@ func TestAggregateJobStatus(t *testing.T) {
3849 {[]Status {StatusSuccess , StatusRunning }, StatusRunning },
3950 {[]Status {StatusSuccess , StatusBlocked }, StatusBlocked },
4051
52+ // any cancelled, then cancelled
53+ {[]Status {StatusCancelled }, StatusCancelled },
54+ {[]Status {StatusCancelled , StatusSuccess }, StatusCancelled },
55+ {[]Status {StatusCancelled , StatusSkipped }, StatusCancelled },
56+ {[]Status {StatusCancelled , StatusFailure }, StatusCancelled },
57+ {[]Status {StatusCancelled , StatusWaiting }, StatusCancelled },
58+ {[]Status {StatusCancelled , StatusRunning }, StatusCancelled },
59+ {[]Status {StatusCancelled , StatusBlocked }, StatusCancelled },
60+
4161 // failure with other status, fail fast
4262 // Should "running" win? Maybe no: old code does make "running" win, but GitHub does fail fast.
4363 {[]Status {StatusFailure }, StatusFailure },
4464 {[]Status {StatusFailure , StatusSuccess }, StatusFailure },
4565 {[]Status {StatusFailure , StatusSkipped }, StatusFailure },
46- {[]Status {StatusFailure , StatusCancelled }, StatusFailure },
66+ {[]Status {StatusFailure , StatusCancelled }, StatusCancelled },
4767 {[]Status {StatusFailure , StatusWaiting }, StatusFailure },
4868 {[]Status {StatusFailure , StatusRunning }, StatusFailure },
4969 {[]Status {StatusFailure , StatusBlocked }, StatusFailure },
5070
5171 // skipped with other status
52- {[]Status {StatusSkipped }, StatusSuccess },
72+ // "all skipped" is also considered as "mergeable" by "services/actions.toCommitStatus", the same as GitHub
73+ {[]Status {StatusSkipped }, StatusSkipped },
5374 {[]Status {StatusSkipped , StatusSuccess }, StatusSuccess },
5475 {[]Status {StatusSkipped , StatusFailure }, StatusFailure },
5576 {[]Status {StatusSkipped , StatusCancelled }, StatusCancelled },
0 commit comments