|
|
@@ -21,23 +21,27 @@ func sign(body string) string {
|
|
|
type call struct{ repo, sha, by string }
|
|
|
|
|
|
func TestHandler(t *testing.T) {
|
|
|
- merged := `{"action":"closed","pull_request":{"merged":true,"base_branch":"main","merge_commit_sha":"abc123"},"repository":{"full_name":"bajdev/posts"},"sender":{"username":"bajdev"}}`
|
|
|
+ merged := `{"action":"closed","pull_request":{"merged":true,"base_branch":"main","merge_commit_sha":"0bfb14ee4067"},"repository":{"full_name":"bajdev/posts"},"sender":{"username":"bajdev"}}`
|
|
|
+ // Every release is of origin/main, whatever merge_commit_sha says: Gogs
|
|
|
+ // puts the head branch's commit there, not the merge commit.
|
|
|
+ withHead := call{"bajdev/posts", "origin/main", "PR merged by bajdev (head 0bfb14e)"}
|
|
|
tests := []struct {
|
|
|
name, method, event, body, sig string
|
|
|
status int
|
|
|
- released bool
|
|
|
+ want *call // nil: no release
|
|
|
}{
|
|
|
- {"merged into main", "POST", "pull_request", merged, "", 202, true},
|
|
|
- {"bad signature", "POST", "pull_request", merged, "deadbeef", 401, false},
|
|
|
- {"missing signature", "POST", "pull_request", merged, "-", 401, false},
|
|
|
- {"GET", "GET", "pull_request", merged, "", 405, false},
|
|
|
- {"push event", "POST", "push", merged, "", 204, false},
|
|
|
- {"opened", "POST", "pull_request", strings.Replace(merged, `"closed"`, `"opened"`, 1), "", 204, false},
|
|
|
- {"closed without merge", "POST", "pull_request", strings.Replace(merged, `"merged":true`, `"merged":false`, 1), "", 204, false},
|
|
|
- {"merged into another branch", "POST", "pull_request", strings.Replace(merged, `"main"`, `"dev"`, 1), "", 204, false},
|
|
|
- {"no merge commit", "POST", "pull_request", strings.Replace(merged, `"abc123"`, `""`, 1), "", 204, false},
|
|
|
- {"no repository", "POST", "pull_request", strings.Replace(merged, `"bajdev/posts"`, `""`, 1), "", 204, false},
|
|
|
- {"not JSON", "POST", "pull_request", "not json", "", 204, false},
|
|
|
+ {"merged into main", "POST", "pull_request", merged, "", 202, &withHead},
|
|
|
+ {"no merge commit sha", "POST", "pull_request", strings.Replace(merged, `"0bfb14ee4067"`, `""`, 1), "", 202,
|
|
|
+ &call{"bajdev/posts", "origin/main", "PR merged by bajdev"}},
|
|
|
+ {"bad signature", "POST", "pull_request", merged, "deadbeef", 401, nil},
|
|
|
+ {"missing signature", "POST", "pull_request", merged, "-", 401, nil},
|
|
|
+ {"GET", "GET", "pull_request", merged, "", 405, nil},
|
|
|
+ {"push event", "POST", "push", merged, "", 204, nil},
|
|
|
+ {"opened", "POST", "pull_request", strings.Replace(merged, `"closed"`, `"opened"`, 1), "", 204, nil},
|
|
|
+ {"closed without merge", "POST", "pull_request", strings.Replace(merged, `"merged":true`, `"merged":false`, 1), "", 204, nil},
|
|
|
+ {"merged into another branch", "POST", "pull_request", strings.Replace(merged, `"main"`, `"dev"`, 1), "", 204, nil},
|
|
|
+ {"no repository", "POST", "pull_request", strings.Replace(merged, `"bajdev/posts"`, `""`, 1), "", 204, nil},
|
|
|
+ {"not JSON", "POST", "pull_request", "not json", "", 204, nil},
|
|
|
}
|
|
|
for _, tt := range tests {
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
@@ -59,14 +63,14 @@ func TestHandler(t *testing.T) {
|
|
|
}
|
|
|
select {
|
|
|
case c := <-calls:
|
|
|
- if !tt.released {
|
|
|
+ if tt.want == nil {
|
|
|
t.Fatalf("unexpected release %+v", c)
|
|
|
}
|
|
|
- if c != (call{"bajdev/posts", "abc123", "PR merged by bajdev"}) {
|
|
|
- t.Errorf("release called with %+v", c)
|
|
|
+ if c != *tt.want {
|
|
|
+ t.Errorf("release called with %+v, want %+v", c, *tt.want)
|
|
|
}
|
|
|
case <-time.After(200 * time.Millisecond):
|
|
|
- if tt.released {
|
|
|
+ if tt.want != nil {
|
|
|
t.Fatal("release was not called")
|
|
|
}
|
|
|
}
|