123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595 |
- // Copyright 2019 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- 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},
- TotalCommits: 2,
- 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",
- AvatarURL: "http://localhost:3000/user1/avatar",
- },
- Repository: &api.Repository{
- HTMLURL: "http://localhost:3000/test/repo",
- Name: "repo",
- FullName: "test/repo",
- },
- Issue: &api.Issue{
- 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",
- },
- },
- }
- }
-
- func issueCommentTestPayload() *api.IssueCommentPayload {
- return &api.IssueCommentPayload{
- Action: api.HookIssueCommentCreated,
- 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",
- },
- Comment: &api.Comment{
- HTMLURL: "http://localhost:3000/test/repo/issues/2#issuecomment-4",
- IssueURL: "http://localhost:3000/test/repo/issues/2",
- Body: "more info needed",
- },
- Issue: &api.Issue{
- 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",
- },
- }
- }
-
- func pullRequestCommentTestPayload() *api.IssueCommentPayload {
- return &api.IssueCommentPayload{
- Action: api.HookIssueCommentCreated,
- 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",
- },
- Comment: &api.Comment{
- 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: 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,
- }
- }
-
- func wikiTestPayload() *api.WikiPayload {
- return &api.WikiPayload{
- Repository: &api.Repository{
- HTMLURL: "http://localhost:3000/test/repo",
- Name: "repo",
- FullName: "test/repo",
- },
- Sender: &api.User{
- UserName: "user1",
- AvatarURL: "http://localhost:3000/user1/avatar",
- },
- Page: "index",
- Comment: "Wiki change comment",
- }
- }
-
- func pullReleaseTestPayload() *api.ReleasePayload {
- return &api.ReleasePayload{
- Action: api.HookReleasePublished,
- 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",
- },
- Release: &api.Release{
- 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",
- },
- }
- }
-
- func pullRequestTestPayload() *api.PullRequestPayload {
- return &api.PullRequestPayload{
- Action: api.HookIssueOpened,
- Index: 12,
- 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",
- },
- PullRequest: &api.PullRequest{
- 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 TestGetWikiPayloadInfo(t *testing.T) {
- p := wikiTestPayload()
-
- cases := []struct {
- action api.HookWikiAction
- text string
- color int
- link string
- }{
- {
- api.HookWikiCreated,
- "[test/repo] New wiki page 'index' (Wiki change comment) by user1",
- greenColor,
- "index",
- },
- {
- api.HookWikiEdited,
- "[test/repo] Wiki page 'index' edited (Wiki change comment) by user1",
- yellowColor,
- "index",
- },
- {
- api.HookWikiDeleted,
- "[test/repo] Wiki page 'index' deleted by user1",
- redColor,
- "index",
- },
- }
-
- for i, c := range cases {
- p.Action = c.action
- text, color, link := getWikiPayloadInfo(p, noneLinkFormatter, true)
- assert.Equal(t, c.text, text, "case %d", i)
- assert.Equal(t, c.color, color, "case %d", i)
- assert.Equal(t, c.link, link, "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)
- }
- }
|