code.gitea.io/gitea@v1.21.7/services/webhook/discord_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package webhook 5 6 import ( 7 "testing" 8 9 "code.gitea.io/gitea/modules/setting" 10 api "code.gitea.io/gitea/modules/structs" 11 webhook_module "code.gitea.io/gitea/modules/webhook" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestDiscordPayload(t *testing.T) { 18 t.Run("Create", func(t *testing.T) { 19 p := createTestPayload() 20 21 d := new(DiscordPayload) 22 pl, err := d.Create(p) 23 require.NoError(t, err) 24 require.NotNil(t, pl) 25 require.IsType(t, &DiscordPayload{}, pl) 26 27 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 28 assert.Equal(t, "[test/repo] branch test created", pl.(*DiscordPayload).Embeds[0].Title) 29 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 30 assert.Equal(t, "http://localhost:3000/test/repo/src/test", pl.(*DiscordPayload).Embeds[0].URL) 31 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 32 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 33 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 34 }) 35 36 t.Run("Delete", func(t *testing.T) { 37 p := deleteTestPayload() 38 39 d := new(DiscordPayload) 40 pl, err := d.Delete(p) 41 require.NoError(t, err) 42 require.NotNil(t, pl) 43 require.IsType(t, &DiscordPayload{}, pl) 44 45 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 46 assert.Equal(t, "[test/repo] branch test deleted", pl.(*DiscordPayload).Embeds[0].Title) 47 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 48 assert.Equal(t, "http://localhost:3000/test/repo/src/test", pl.(*DiscordPayload).Embeds[0].URL) 49 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 50 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 51 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 52 }) 53 54 t.Run("Fork", func(t *testing.T) { 55 p := forkTestPayload() 56 57 d := new(DiscordPayload) 58 pl, err := d.Fork(p) 59 require.NoError(t, err) 60 require.NotNil(t, pl) 61 require.IsType(t, &DiscordPayload{}, pl) 62 63 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 64 assert.Equal(t, "test/repo2 is forked to test/repo", pl.(*DiscordPayload).Embeds[0].Title) 65 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 66 assert.Equal(t, "http://localhost:3000/test/repo", pl.(*DiscordPayload).Embeds[0].URL) 67 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 68 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 69 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 70 }) 71 72 t.Run("Push", func(t *testing.T) { 73 p := pushTestPayload() 74 75 d := new(DiscordPayload) 76 pl, err := d.Push(p) 77 require.NoError(t, err) 78 require.NotNil(t, pl) 79 require.IsType(t, &DiscordPayload{}, pl) 80 81 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 82 assert.Equal(t, "[test/repo:test] 2 new commits", pl.(*DiscordPayload).Embeds[0].Title) 83 assert.Equal(t, "[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1", pl.(*DiscordPayload).Embeds[0].Description) 84 assert.Equal(t, "http://localhost:3000/test/repo/src/test", pl.(*DiscordPayload).Embeds[0].URL) 85 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 86 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 87 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 88 }) 89 90 t.Run("Issue", func(t *testing.T) { 91 p := issueTestPayload() 92 93 d := new(DiscordPayload) 94 p.Action = api.HookIssueOpened 95 pl, err := d.Issue(p) 96 require.NoError(t, err) 97 require.NotNil(t, pl) 98 require.IsType(t, &DiscordPayload{}, pl) 99 100 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 101 assert.Equal(t, "[test/repo] Issue opened: #2 crash", pl.(*DiscordPayload).Embeds[0].Title) 102 assert.Equal(t, "issue body", pl.(*DiscordPayload).Embeds[0].Description) 103 assert.Equal(t, "http://localhost:3000/test/repo/issues/2", pl.(*DiscordPayload).Embeds[0].URL) 104 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 105 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 106 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 107 108 p.Action = api.HookIssueClosed 109 pl, err = d.Issue(p) 110 require.NoError(t, err) 111 require.NotNil(t, pl) 112 require.IsType(t, &DiscordPayload{}, pl) 113 114 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 115 assert.Equal(t, "[test/repo] Issue closed: #2 crash", pl.(*DiscordPayload).Embeds[0].Title) 116 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 117 assert.Equal(t, "http://localhost:3000/test/repo/issues/2", pl.(*DiscordPayload).Embeds[0].URL) 118 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 119 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 120 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 121 }) 122 123 t.Run("IssueComment", func(t *testing.T) { 124 p := issueCommentTestPayload() 125 126 d := new(DiscordPayload) 127 pl, err := d.IssueComment(p) 128 require.NoError(t, err) 129 require.NotNil(t, pl) 130 require.IsType(t, &DiscordPayload{}, pl) 131 132 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 133 assert.Equal(t, "[test/repo] New comment on issue #2 crash", pl.(*DiscordPayload).Embeds[0].Title) 134 assert.Equal(t, "more info needed", pl.(*DiscordPayload).Embeds[0].Description) 135 assert.Equal(t, "http://localhost:3000/test/repo/issues/2#issuecomment-4", pl.(*DiscordPayload).Embeds[0].URL) 136 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 137 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 138 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 139 }) 140 141 t.Run("PullRequest", func(t *testing.T) { 142 p := pullRequestTestPayload() 143 144 d := new(DiscordPayload) 145 pl, err := d.PullRequest(p) 146 require.NoError(t, err) 147 require.NotNil(t, pl) 148 require.IsType(t, &DiscordPayload{}, pl) 149 150 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 151 assert.Equal(t, "[test/repo] Pull request opened: #12 Fix bug", pl.(*DiscordPayload).Embeds[0].Title) 152 assert.Equal(t, "fixes bug #2", pl.(*DiscordPayload).Embeds[0].Description) 153 assert.Equal(t, "http://localhost:3000/test/repo/pulls/12", pl.(*DiscordPayload).Embeds[0].URL) 154 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 155 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 156 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 157 }) 158 159 t.Run("PullRequestComment", func(t *testing.T) { 160 p := pullRequestCommentTestPayload() 161 162 d := new(DiscordPayload) 163 pl, err := d.IssueComment(p) 164 require.NoError(t, err) 165 require.NotNil(t, pl) 166 require.IsType(t, &DiscordPayload{}, pl) 167 168 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 169 assert.Equal(t, "[test/repo] New comment on pull request #12 Fix bug", pl.(*DiscordPayload).Embeds[0].Title) 170 assert.Equal(t, "changes requested", pl.(*DiscordPayload).Embeds[0].Description) 171 assert.Equal(t, "http://localhost:3000/test/repo/pulls/12#issuecomment-4", pl.(*DiscordPayload).Embeds[0].URL) 172 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 173 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 174 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 175 }) 176 177 t.Run("Review", func(t *testing.T) { 178 p := pullRequestTestPayload() 179 p.Action = api.HookIssueReviewed 180 181 d := new(DiscordPayload) 182 pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved) 183 require.NoError(t, err) 184 require.NotNil(t, pl) 185 require.IsType(t, &DiscordPayload{}, pl) 186 187 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 188 assert.Equal(t, "[test/repo] Pull request review approved: #12 Fix bug", pl.(*DiscordPayload).Embeds[0].Title) 189 assert.Equal(t, "good job", pl.(*DiscordPayload).Embeds[0].Description) 190 assert.Equal(t, "http://localhost:3000/test/repo/pulls/12", pl.(*DiscordPayload).Embeds[0].URL) 191 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 192 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 193 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 194 }) 195 196 t.Run("Repository", func(t *testing.T) { 197 p := repositoryTestPayload() 198 199 d := new(DiscordPayload) 200 pl, err := d.Repository(p) 201 require.NoError(t, err) 202 require.NotNil(t, pl) 203 require.IsType(t, &DiscordPayload{}, pl) 204 205 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 206 assert.Equal(t, "[test/repo] Repository created", pl.(*DiscordPayload).Embeds[0].Title) 207 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 208 assert.Equal(t, "http://localhost:3000/test/repo", pl.(*DiscordPayload).Embeds[0].URL) 209 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 210 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 211 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 212 }) 213 214 t.Run("Package", func(t *testing.T) { 215 p := packageTestPayload() 216 217 d := new(DiscordPayload) 218 pl, err := d.Package(p) 219 require.NoError(t, err) 220 require.NotNil(t, pl) 221 require.IsType(t, &DiscordPayload{}, pl) 222 223 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 224 assert.Equal(t, "Package created: GiteaContainer:latest", pl.(*DiscordPayload).Embeds[0].Title) 225 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 226 assert.Equal(t, "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest", pl.(*DiscordPayload).Embeds[0].URL) 227 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 228 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 229 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 230 }) 231 232 t.Run("Wiki", func(t *testing.T) { 233 p := wikiTestPayload() 234 235 d := new(DiscordPayload) 236 p.Action = api.HookWikiCreated 237 pl, err := d.Wiki(p) 238 require.NoError(t, err) 239 require.NotNil(t, pl) 240 require.IsType(t, &DiscordPayload{}, pl) 241 242 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 243 assert.Equal(t, "[test/repo] New wiki page 'index' (Wiki change comment)", pl.(*DiscordPayload).Embeds[0].Title) 244 assert.Equal(t, "Wiki change comment", pl.(*DiscordPayload).Embeds[0].Description) 245 assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", pl.(*DiscordPayload).Embeds[0].URL) 246 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 247 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 248 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 249 250 p.Action = api.HookWikiEdited 251 pl, err = d.Wiki(p) 252 require.NoError(t, err) 253 require.NotNil(t, pl) 254 require.IsType(t, &DiscordPayload{}, pl) 255 256 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 257 assert.Equal(t, "[test/repo] Wiki page 'index' edited (Wiki change comment)", pl.(*DiscordPayload).Embeds[0].Title) 258 assert.Equal(t, "Wiki change comment", pl.(*DiscordPayload).Embeds[0].Description) 259 assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", pl.(*DiscordPayload).Embeds[0].URL) 260 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 261 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 262 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 263 264 p.Action = api.HookWikiDeleted 265 pl, err = d.Wiki(p) 266 require.NoError(t, err) 267 require.NotNil(t, pl) 268 require.IsType(t, &DiscordPayload{}, pl) 269 270 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 271 assert.Equal(t, "[test/repo] Wiki page 'index' deleted", pl.(*DiscordPayload).Embeds[0].Title) 272 assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description) 273 assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", pl.(*DiscordPayload).Embeds[0].URL) 274 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 275 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 276 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 277 }) 278 279 t.Run("Release", func(t *testing.T) { 280 p := pullReleaseTestPayload() 281 282 d := new(DiscordPayload) 283 pl, err := d.Release(p) 284 require.NoError(t, err) 285 require.NotNil(t, pl) 286 require.IsType(t, &DiscordPayload{}, pl) 287 288 assert.Len(t, pl.(*DiscordPayload).Embeds, 1) 289 assert.Equal(t, "[test/repo] Release created: v1.0", pl.(*DiscordPayload).Embeds[0].Title) 290 assert.Equal(t, "Note of first stable release", pl.(*DiscordPayload).Embeds[0].Description) 291 assert.Equal(t, "http://localhost:3000/test/repo/releases/tag/v1.0", pl.(*DiscordPayload).Embeds[0].URL) 292 assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name) 293 assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL) 294 assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL) 295 }) 296 } 297 298 func TestDiscordJSONPayload(t *testing.T) { 299 p := pushTestPayload() 300 301 pl, err := new(DiscordPayload).Push(p) 302 require.NoError(t, err) 303 require.NotNil(t, pl) 304 require.IsType(t, &DiscordPayload{}, pl) 305 306 json, err := pl.JSONPayload() 307 require.NoError(t, err) 308 assert.NotEmpty(t, json) 309 }