code.gitea.io/gitea@v1.21.7/services/webhook/slack_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package webhook 5 6 import ( 7 "testing" 8 9 api "code.gitea.io/gitea/modules/structs" 10 webhook_module "code.gitea.io/gitea/modules/webhook" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestSlackPayload(t *testing.T) { 17 t.Run("Create", func(t *testing.T) { 18 p := createTestPayload() 19 20 d := new(SlackPayload) 21 pl, err := d.Create(p) 22 require.NoError(t, err) 23 require.NotNil(t, pl) 24 require.IsType(t, &SlackPayload{}, pl) 25 26 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:<http://localhost:3000/test/repo/src/branch/test|test>] branch created by user1", pl.(*SlackPayload).Text) 27 }) 28 29 t.Run("Delete", func(t *testing.T) { 30 p := deleteTestPayload() 31 32 d := new(SlackPayload) 33 pl, err := d.Delete(p) 34 require.NoError(t, err) 35 require.NotNil(t, pl) 36 require.IsType(t, &SlackPayload{}, pl) 37 38 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:test] branch deleted by user1", pl.(*SlackPayload).Text) 39 }) 40 41 t.Run("Fork", func(t *testing.T) { 42 p := forkTestPayload() 43 44 d := new(SlackPayload) 45 pl, err := d.Fork(p) 46 require.NoError(t, err) 47 require.NotNil(t, pl) 48 require.IsType(t, &SlackPayload{}, pl) 49 50 assert.Equal(t, "<http://localhost:3000/test/repo2|test/repo2> is forked to <http://localhost:3000/test/repo|test/repo>", pl.(*SlackPayload).Text) 51 }) 52 53 t.Run("Push", func(t *testing.T) { 54 p := pushTestPayload() 55 56 d := new(SlackPayload) 57 pl, err := d.Push(p) 58 require.NoError(t, err) 59 require.NotNil(t, pl) 60 require.IsType(t, &SlackPayload{}, pl) 61 62 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:<http://localhost:3000/test/repo/src/branch/test|test>] 2 new commits pushed by user1", pl.(*SlackPayload).Text) 63 }) 64 65 t.Run("Issue", func(t *testing.T) { 66 p := issueTestPayload() 67 68 d := new(SlackPayload) 69 p.Action = api.HookIssueOpened 70 pl, err := d.Issue(p) 71 require.NoError(t, err) 72 require.NotNil(t, pl) 73 require.IsType(t, &SlackPayload{}, pl) 74 75 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue opened: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 76 77 p.Action = api.HookIssueClosed 78 pl, err = d.Issue(p) 79 require.NoError(t, err) 80 require.NotNil(t, pl) 81 require.IsType(t, &SlackPayload{}, pl) 82 83 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue closed: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 84 }) 85 86 t.Run("IssueComment", func(t *testing.T) { 87 p := issueCommentTestPayload() 88 89 d := new(SlackPayload) 90 pl, err := d.IssueComment(p) 91 require.NoError(t, err) 92 require.NotNil(t, pl) 93 require.IsType(t, &SlackPayload{}, pl) 94 95 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on issue <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 96 }) 97 98 t.Run("PullRequest", func(t *testing.T) { 99 p := pullRequestTestPayload() 100 101 d := new(SlackPayload) 102 pl, err := d.PullRequest(p) 103 require.NoError(t, err) 104 require.NotNil(t, pl) 105 require.IsType(t, &SlackPayload{}, pl) 106 107 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Pull request opened: <http://localhost:3000/test/repo/pulls/12|#12 Fix bug> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 108 }) 109 110 t.Run("PullRequestComment", func(t *testing.T) { 111 p := pullRequestCommentTestPayload() 112 113 d := new(SlackPayload) 114 pl, err := d.IssueComment(p) 115 require.NoError(t, err) 116 require.NotNil(t, pl) 117 require.IsType(t, &SlackPayload{}, pl) 118 119 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on pull request <http://localhost:3000/test/repo/pulls/12|#12 Fix bug> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 120 }) 121 122 t.Run("Review", func(t *testing.T) { 123 p := pullRequestTestPayload() 124 p.Action = api.HookIssueReviewed 125 126 d := new(SlackPayload) 127 pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved) 128 require.NoError(t, err) 129 require.NotNil(t, pl) 130 require.IsType(t, &SlackPayload{}, pl) 131 132 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Pull request review approved: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 133 }) 134 135 t.Run("Repository", func(t *testing.T) { 136 p := repositoryTestPayload() 137 138 d := new(SlackPayload) 139 pl, err := d.Repository(p) 140 require.NoError(t, err) 141 require.NotNil(t, pl) 142 require.IsType(t, &SlackPayload{}, pl) 143 144 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Repository created by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 145 }) 146 147 t.Run("Package", func(t *testing.T) { 148 p := packageTestPayload() 149 150 d := new(SlackPayload) 151 pl, err := d.Package(p) 152 require.NoError(t, err) 153 require.NotNil(t, pl) 154 require.IsType(t, &SlackPayload{}, pl) 155 156 assert.Equal(t, "Package created: <http://localhost:3000/user1/-/packages/container/GiteaContainer/latest|GiteaContainer:latest> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 157 }) 158 159 t.Run("Wiki", func(t *testing.T) { 160 p := wikiTestPayload() 161 162 d := new(SlackPayload) 163 p.Action = api.HookWikiCreated 164 pl, err := d.Wiki(p) 165 require.NoError(t, err) 166 require.NotNil(t, pl) 167 require.IsType(t, &SlackPayload{}, pl) 168 169 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New wiki page '<http://localhost:3000/test/repo/wiki/index|index>' (Wiki change comment) by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 170 171 p.Action = api.HookWikiEdited 172 pl, err = d.Wiki(p) 173 require.NoError(t, err) 174 require.NotNil(t, pl) 175 require.IsType(t, &SlackPayload{}, pl) 176 177 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Wiki page '<http://localhost:3000/test/repo/wiki/index|index>' edited (Wiki change comment) by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 178 179 p.Action = api.HookWikiDeleted 180 pl, err = d.Wiki(p) 181 require.NoError(t, err) 182 require.NotNil(t, pl) 183 require.IsType(t, &SlackPayload{}, pl) 184 185 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Wiki page '<http://localhost:3000/test/repo/wiki/index|index>' deleted by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 186 }) 187 188 t.Run("Release", func(t *testing.T) { 189 p := pullReleaseTestPayload() 190 191 d := new(SlackPayload) 192 pl, err := d.Release(p) 193 require.NoError(t, err) 194 require.NotNil(t, pl) 195 require.IsType(t, &SlackPayload{}, pl) 196 197 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Release created: <http://localhost:3000/test/repo/releases/tag/v1.0|v1.0> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text) 198 }) 199 } 200 201 func TestSlackJSONPayload(t *testing.T) { 202 p := pushTestPayload() 203 204 pl, err := new(SlackPayload).Push(p) 205 require.NoError(t, err) 206 require.NotNil(t, pl) 207 require.IsType(t, &SlackPayload{}, pl) 208 209 json, err := pl.JSONPayload() 210 require.NoError(t, err) 211 assert.NotEmpty(t, json) 212 } 213 214 func TestIsValidSlackChannel(t *testing.T) { 215 tt := []struct { 216 channelName string 217 expected bool 218 }{ 219 {"gitea", true}, 220 {"#gitea", true}, 221 {" ", false}, 222 {"#", false}, 223 {" #", false}, 224 {"gitea ", false}, 225 {" gitea", false}, 226 } 227 228 for _, v := range tt { 229 assert.Equal(t, v.expected, IsValidSlackChannel(v.channelName)) 230 } 231 }