forked from forgejo/forgejo
Add tests for all webhooks (#16214)
* Added tests for MS Teams. * Added tests for Dingtalk. * Added tests for Telegram. * Added tests for Feishu. * Added tests for Discord. * Added tests for closed issue and pullrequest comment. * Added tests for Matrix. * Trim all spaces. * Added tests for Slack. * Added JSONPayload tests. * Added general tests. * Replaced duplicated code. Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
8601440e81
commit
4fcae3d06d
15 changed files with 2127 additions and 908 deletions
|
@ -5,14 +5,111 @@
|
|||
package webhook
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
api "code.gitea.io/gitea/modules/structs"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func createTestPayload() *api.CreatePayload {
|
||||
return &api.CreatePayload{
|
||||
Sha: "2020558fe2e34debb818a514715839cabd25e777",
|
||||
Ref: "refs/heads/test",
|
||||
RefType: "branch",
|
||||
Repo: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
Name: "repo",
|
||||
FullName: "test/repo",
|
||||
},
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func deleteTestPayload() *api.DeletePayload {
|
||||
return &api.DeletePayload{
|
||||
Ref: "refs/heads/test",
|
||||
RefType: "branch",
|
||||
Repo: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
Name: "repo",
|
||||
FullName: "test/repo",
|
||||
},
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func forkTestPayload() *api.ForkPayload {
|
||||
return &api.ForkPayload{
|
||||
Forkee: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo2",
|
||||
Name: "repo2",
|
||||
FullName: "test/repo2",
|
||||
},
|
||||
Repo: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
Name: "repo",
|
||||
FullName: "test/repo",
|
||||
},
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func pushTestPayload() *api.PushPayload {
|
||||
commit := &api.PayloadCommit{
|
||||
ID: "2020558fe2e34debb818a514715839cabd25e778",
|
||||
Message: "commit message",
|
||||
URL: "http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778",
|
||||
Author: &api.PayloadUser{
|
||||
Name: "user1",
|
||||
Email: "user1@localhost",
|
||||
UserName: "user1",
|
||||
},
|
||||
Committer: &api.PayloadUser{
|
||||
Name: "user1",
|
||||
Email: "user1@localhost",
|
||||
UserName: "user1",
|
||||
},
|
||||
}
|
||||
|
||||
return &api.PushPayload{
|
||||
Ref: "refs/heads/test",
|
||||
Before: "2020558fe2e34debb818a514715839cabd25e777",
|
||||
After: "2020558fe2e34debb818a514715839cabd25e778",
|
||||
CompareURL: "",
|
||||
HeadCommit: commit,
|
||||
Commits: []*api.PayloadCommit{commit, commit},
|
||||
Repo: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
Name: "repo",
|
||||
FullName: "test/repo",
|
||||
},
|
||||
Pusher: &api.User{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func issueTestPayload() *api.IssuePayload {
|
||||
return &api.IssuePayload{
|
||||
Index: 2,
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Repository: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
|
@ -20,10 +117,23 @@ func issueTestPayload() *api.IssuePayload {
|
|||
FullName: "test/repo",
|
||||
},
|
||||
Issue: &api.Issue{
|
||||
ID: 2,
|
||||
Index: 2,
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/issues/2",
|
||||
Title: "crash",
|
||||
ID: 2,
|
||||
Index: 2,
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/issues/2",
|
||||
HTMLURL: "http://localhost:3000/test/repo/issues/2",
|
||||
Title: "crash",
|
||||
Body: "issue body",
|
||||
Assignees: []*api.User{
|
||||
{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
},
|
||||
Milestone: &api.Milestone{
|
||||
ID: 1,
|
||||
Title: "Milestone Title",
|
||||
Description: "Milestone Description",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +142,8 @@ func issueCommentTestPayload() *api.IssueCommentPayload {
|
|||
return &api.IssueCommentPayload{
|
||||
Action: api.HookIssueCommentCreated,
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Repository: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
|
@ -45,11 +156,12 @@ func issueCommentTestPayload() *api.IssueCommentPayload {
|
|||
Body: "more info needed",
|
||||
},
|
||||
Issue: &api.Issue{
|
||||
ID: 2,
|
||||
Index: 2,
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/issues/2",
|
||||
Title: "crash",
|
||||
Body: "this happened",
|
||||
ID: 2,
|
||||
Index: 2,
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/issues/2",
|
||||
HTMLURL: "http://localhost:3000/test/repo/issues/2",
|
||||
Title: "crash",
|
||||
Body: "this happened",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -58,7 +170,8 @@ func pullRequestCommentTestPayload() *api.IssueCommentPayload {
|
|||
return &api.IssueCommentPayload{
|
||||
Action: api.HookIssueCommentCreated,
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Repository: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
|
@ -66,16 +179,17 @@ func pullRequestCommentTestPayload() *api.IssueCommentPayload {
|
|||
FullName: "test/repo",
|
||||
},
|
||||
Comment: &api.Comment{
|
||||
HTMLURL: "http://localhost:3000/test/repo/pulls/2#issuecomment-4",
|
||||
PRURL: "http://localhost:3000/test/repo/pulls/2",
|
||||
HTMLURL: "http://localhost:3000/test/repo/pulls/12#issuecomment-4",
|
||||
PRURL: "http://localhost:3000/test/repo/pulls/12",
|
||||
Body: "changes requested",
|
||||
},
|
||||
Issue: &api.Issue{
|
||||
ID: 2,
|
||||
Index: 2,
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/issues/2",
|
||||
Title: "Fix bug",
|
||||
Body: "fixes bug #2",
|
||||
ID: 12,
|
||||
Index: 12,
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/pulls/12",
|
||||
HTMLURL: "http://localhost:3000/test/repo/pulls/12",
|
||||
Title: "Fix bug",
|
||||
Body: "fixes bug #2",
|
||||
},
|
||||
IsPull: true,
|
||||
}
|
||||
|
@ -85,7 +199,8 @@ func pullReleaseTestPayload() *api.ReleasePayload {
|
|||
return &api.ReleasePayload{
|
||||
Action: api.HookReleasePublished,
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Repository: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
|
@ -96,6 +211,7 @@ func pullReleaseTestPayload() *api.ReleasePayload {
|
|||
TagName: "v1.0",
|
||||
Target: "master",
|
||||
Title: "First stable release",
|
||||
Note: "Note of first stable release",
|
||||
URL: "http://localhost:3000/api/v1/repos/test/repo/releases/2",
|
||||
},
|
||||
}
|
||||
|
@ -104,9 +220,10 @@ func pullReleaseTestPayload() *api.ReleasePayload {
|
|||
func pullRequestTestPayload() *api.PullRequestPayload {
|
||||
return &api.PullRequestPayload{
|
||||
Action: api.HookIssueOpened,
|
||||
Index: 2,
|
||||
Index: 12,
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Repository: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
|
@ -114,12 +231,311 @@ func pullRequestTestPayload() *api.PullRequestPayload {
|
|||
FullName: "test/repo",
|
||||
},
|
||||
PullRequest: &api.PullRequest{
|
||||
ID: 2,
|
||||
Index: 2,
|
||||
ID: 12,
|
||||
Index: 12,
|
||||
URL: "http://localhost:3000/test/repo/pulls/12",
|
||||
HTMLURL: "http://localhost:3000/test/repo/pulls/12",
|
||||
Title: "Fix bug",
|
||||
Body: "fixes bug #2",
|
||||
Mergeable: true,
|
||||
Assignees: []*api.User{
|
||||
{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
},
|
||||
Milestone: &api.Milestone{
|
||||
ID: 1,
|
||||
Title: "Milestone Title",
|
||||
Description: "Milestone Description",
|
||||
},
|
||||
},
|
||||
Review: &api.ReviewPayload{
|
||||
Content: "good job",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func repositoryTestPayload() *api.RepositoryPayload {
|
||||
return &api.RepositoryPayload{
|
||||
Action: api.HookRepoCreated,
|
||||
Sender: &api.User{
|
||||
UserName: "user1",
|
||||
AvatarURL: "http://localhost:3000/user1/avatar",
|
||||
},
|
||||
Repository: &api.Repository{
|
||||
HTMLURL: "http://localhost:3000/test/repo",
|
||||
Name: "repo",
|
||||
FullName: "test/repo",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetIssuesPayloadInfo(t *testing.T) {
|
||||
p := issueTestPayload()
|
||||
|
||||
cases := []struct {
|
||||
action api.HookIssueAction
|
||||
text string
|
||||
issueTitle string
|
||||
attachmentText string
|
||||
color int
|
||||
}{
|
||||
{
|
||||
api.HookIssueOpened,
|
||||
"[test/repo] Issue opened: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"issue body",
|
||||
orangeColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueClosed,
|
||||
"[test/repo] Issue closed: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
redColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueReOpened,
|
||||
"[test/repo] Issue re-opened: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueEdited,
|
||||
"[test/repo] Issue edited: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"issue body",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueAssigned,
|
||||
"[test/repo] Issue assigned to user1: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
greenColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueUnassigned,
|
||||
"[test/repo] Issue unassigned: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueLabelUpdated,
|
||||
"[test/repo] Issue labels updated: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueLabelCleared,
|
||||
"[test/repo] Issue labels cleared: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueSynchronized,
|
||||
"[test/repo] Issue synchronized: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueMilestoned,
|
||||
"[test/repo] Issue milestoned to Milestone Title: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueDemilestoned,
|
||||
"[test/repo] Issue milestone cleared: #2 crash by user1",
|
||||
"#2 crash",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
p.Action = c.action
|
||||
text, issueTitle, attachmentText, color := getIssuesPayloadInfo(p, noneLinkFormatter, true)
|
||||
assert.Equal(t, c.text, text, "case %d", i)
|
||||
assert.Equal(t, c.issueTitle, issueTitle, "case %d", i)
|
||||
assert.Equal(t, c.attachmentText, attachmentText, "case %d", i)
|
||||
assert.Equal(t, c.color, color, "case %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetPullRequestPayloadInfo(t *testing.T) {
|
||||
p := pullRequestTestPayload()
|
||||
|
||||
cases := []struct {
|
||||
action api.HookIssueAction
|
||||
text string
|
||||
issueTitle string
|
||||
attachmentText string
|
||||
color int
|
||||
}{
|
||||
{
|
||||
api.HookIssueOpened,
|
||||
"[test/repo] Pull request opened: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"fixes bug #2",
|
||||
greenColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueClosed,
|
||||
"[test/repo] Pull request closed: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
redColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueReOpened,
|
||||
"[test/repo] Pull request re-opened: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueEdited,
|
||||
"[test/repo] Pull request edited: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"fixes bug #2",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueAssigned,
|
||||
"[test/repo] Pull request assigned to user1: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
greenColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueUnassigned,
|
||||
"[test/repo] Pull request unassigned: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueLabelUpdated,
|
||||
"[test/repo] Pull request labels updated: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueLabelCleared,
|
||||
"[test/repo] Pull request labels cleared: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueSynchronized,
|
||||
"[test/repo] Pull request synchronized: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueMilestoned,
|
||||
"[test/repo] Pull request milestoned to Milestone Title: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueDemilestoned,
|
||||
"[test/repo] Pull request milestone cleared: #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
"",
|
||||
yellowColor,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
p.Action = c.action
|
||||
text, issueTitle, attachmentText, color := getPullRequestPayloadInfo(p, noneLinkFormatter, true)
|
||||
assert.Equal(t, c.text, text, "case %d", i)
|
||||
assert.Equal(t, c.issueTitle, issueTitle, "case %d", i)
|
||||
assert.Equal(t, c.attachmentText, attachmentText, "case %d", i)
|
||||
assert.Equal(t, c.color, color, "case %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetReleasePayloadInfo(t *testing.T) {
|
||||
p := pullReleaseTestPayload()
|
||||
|
||||
cases := []struct {
|
||||
action api.HookReleaseAction
|
||||
text string
|
||||
color int
|
||||
}{
|
||||
{
|
||||
api.HookReleasePublished,
|
||||
"[test/repo] Release created: v1.0 by user1",
|
||||
greenColor,
|
||||
},
|
||||
{
|
||||
api.HookReleaseUpdated,
|
||||
"[test/repo] Release updated: v1.0 by user1",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookReleaseDeleted,
|
||||
"[test/repo] Release deleted: v1.0 by user1",
|
||||
redColor,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
p.Action = c.action
|
||||
text, color := getReleasePayloadInfo(p, noneLinkFormatter, true)
|
||||
assert.Equal(t, c.text, text, "case %d", i)
|
||||
assert.Equal(t, c.color, color, "case %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetIssueCommentPayloadInfo(t *testing.T) {
|
||||
p := pullRequestCommentTestPayload()
|
||||
|
||||
cases := []struct {
|
||||
action api.HookIssueCommentAction
|
||||
text string
|
||||
issueTitle string
|
||||
color int
|
||||
}{
|
||||
{
|
||||
api.HookIssueCommentCreated,
|
||||
"[test/repo] New comment on pull request #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
greenColorLight,
|
||||
},
|
||||
{
|
||||
api.HookIssueCommentEdited,
|
||||
"[test/repo] Comment edited on pull request #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
yellowColor,
|
||||
},
|
||||
{
|
||||
api.HookIssueCommentDeleted,
|
||||
"[test/repo] Comment deleted on pull request #12 Fix bug by user1",
|
||||
"#12 Fix bug",
|
||||
redColor,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
p.Action = c.action
|
||||
text, issueTitle, color := getIssueCommentPayloadInfo(p, noneLinkFormatter, true)
|
||||
assert.Equal(t, c.text, text, "case %d", i)
|
||||
assert.Equal(t, c.issueTitle, issueTitle, "case %d", i)
|
||||
assert.Equal(t, c.color, color, "case %d", i)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue