Skip to content

Commit adc885b

Browse files
committed
Add tests for merged commit status
1 parent c996e35 commit adc885b

File tree

2 files changed

+169
-1
lines changed

2 files changed

+169
-1
lines changed

services/pull/commit_status.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
5151
}
5252
}
5353

54-
if matchedCount != len(requiredContexts) {
54+
if matchedCount < len(requiredContexts) {
5555
return structs.CommitStatusPending
5656
}
5757

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
package pull
2+
3+
import (
4+
"testing"
5+
6+
model "code.gitea.io/gitea/models/git"
7+
"code.gitea.io/gitea/modules/structs"
8+
)
9+
10+
func TestMergeRequiredContextsCommitStatus_AllRequiredContextsMatched(t *testing.T) {
11+
givenStatuses := createStatuses(
12+
createSuccess("Build 1"),
13+
createSuccess("Build 2"),
14+
)
15+
16+
requiredContexts := createRequiredContexts(
17+
"Build 1",
18+
"Build 2",
19+
)
20+
21+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
22+
23+
assertStatus(t, structs.CommitStatusSuccess, mergedStatus)
24+
}
25+
26+
func TestMergeRequiredContextsCommitStatus_AllRequiredContextsMatchedWithPattern(t *testing.T) {
27+
givenStatuses := createStatuses(
28+
createSuccess("Build 1"),
29+
createSuccess("Build 2"),
30+
)
31+
32+
requiredContexts := createRequiredContexts(
33+
"Build*",
34+
)
35+
36+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
37+
38+
assertStatus(t, structs.CommitStatusSuccess, mergedStatus)
39+
}
40+
41+
func TestMergeRequiredContextsCommitStatus_MissingContext(t *testing.T) {
42+
givenStatuses := createStatuses(
43+
createSuccess("Build 1"),
44+
createSuccess("Build 2"),
45+
)
46+
47+
requiredContexts := createRequiredContexts(
48+
"Build 1",
49+
"Build 2",
50+
"Build 3",
51+
)
52+
53+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
54+
55+
assertStatus(t, structs.CommitStatusPending, mergedStatus)
56+
}
57+
58+
func TestMergeRequiredContextsCommitStatus_MissingContextWithPattern(t *testing.T) {
59+
givenStatuses := createStatuses(
60+
createSuccess("ci/head"),
61+
createSuccess("ci/pr"),
62+
)
63+
64+
requiredContexts := createRequiredContexts(
65+
"ci/*",
66+
"lint",
67+
)
68+
69+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
70+
71+
assertStatus(t, structs.CommitStatusPending, mergedStatus)
72+
}
73+
74+
func TestMergeRequiredContextsCommitStatus_OneCheckFailed(t *testing.T) {
75+
givenStatuses := createStatuses(
76+
createSuccess("Build 1"),
77+
createFailure("Build 2"),
78+
)
79+
80+
requiredContexts := createRequiredContexts(
81+
"Build 1",
82+
"Build 2",
83+
)
84+
85+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
86+
87+
assertStatus(t, structs.CommitStatusFailure, mergedStatus)
88+
}
89+
90+
func TestMergeRequiredContextsCommitStatus_OneCheckFailedWithWildcard(t *testing.T) {
91+
givenStatuses := createStatuses(
92+
createSuccess("ci/head"),
93+
createFailure("ci/pr"),
94+
)
95+
96+
requiredContexts := createRequiredContexts(
97+
"ci/*",
98+
)
99+
100+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
101+
102+
assertStatus(t, structs.CommitStatusFailure, mergedStatus)
103+
}
104+
105+
func TestMergeRequiredContextsCommitStatus_OneCheckPendingWithWildcard(t *testing.T) {
106+
givenStatuses := createStatuses(
107+
createSuccess("ci/head"),
108+
createPending("ci/pr"),
109+
)
110+
111+
requiredContexts := createRequiredContexts(
112+
"ci/*",
113+
)
114+
115+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
116+
117+
assertStatus(t, structs.CommitStatusPending, mergedStatus)
118+
}
119+
120+
func TestMergeRequiredContextsCommitStatus_OneCheckPendingWithCatchAllWildcard(t *testing.T) {
121+
givenStatuses := createStatuses(
122+
createSuccess("ci/head"),
123+
createPending("ci/pr"),
124+
)
125+
126+
requiredContexts := createRequiredContexts(
127+
"*",
128+
)
129+
130+
mergedStatus := MergeRequiredContextsCommitStatus(givenStatuses, requiredContexts)
131+
132+
assertStatus(t, structs.CommitStatusPending, mergedStatus)
133+
}
134+
135+
func assertStatus(t *testing.T, expectedStatus, actualStatus structs.CommitStatusState) {
136+
if actualStatus != expectedStatus {
137+
t.Errorf("Expected merged status <%s> but got <%s>", expectedStatus, actualStatus)
138+
}
139+
}
140+
141+
func createStatuses(statuses ...*model.CommitStatus) []*model.CommitStatus {
142+
return statuses
143+
}
144+
145+
func createRequiredContexts(contexts ...string) []string {
146+
return contexts
147+
}
148+
149+
func createSuccess(context string) *model.CommitStatus {
150+
return &model.CommitStatus{
151+
Context: context,
152+
State: structs.CommitStatusSuccess,
153+
}
154+
}
155+
156+
func createPending(context string) *model.CommitStatus {
157+
return &model.CommitStatus{
158+
Context: context,
159+
State: structs.CommitStatusPending,
160+
}
161+
}
162+
163+
func createFailure(context string) *model.CommitStatus {
164+
return &model.CommitStatus{
165+
Context: context,
166+
State: structs.CommitStatusFailure,
167+
}
168+
}

0 commit comments

Comments
 (0)