loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at forgejo 264 lines 7.3 kB view raw
1// Copyright 2019 The Gitea Authors. All rights reserved. 2// SPDX-License-Identifier: MIT 3 4package webhook 5 6import ( 7 "testing" 8 9 webhook_model "forgejo.org/models/webhook" 10 "forgejo.org/modules/json" 11 api "forgejo.org/modules/structs" 12 webhook_module "forgejo.org/modules/webhook" 13 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16) 17 18func TestSlackPayload(t *testing.T) { 19 sc := slackConvertor{} 20 21 t.Run("Create", func(t *testing.T) { 22 p := createTestPayload() 23 24 pl, err := sc.Create(p) 25 require.NoError(t, err) 26 27 assert.Equal(t, "[test/repo:<http://localhost:3000/test/repo/src/branch/test|test>] branch created by user1", pl.Text) 28 }) 29 30 t.Run("Delete", func(t *testing.T) { 31 p := deleteTestPayload() 32 33 pl, err := sc.Delete(p) 34 require.NoError(t, err) 35 36 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:test] branch deleted by user1", pl.Text) 37 }) 38 39 t.Run("Fork", func(t *testing.T) { 40 p := forkTestPayload() 41 42 pl, err := sc.Fork(p) 43 require.NoError(t, err) 44 45 assert.Equal(t, "<http://localhost:3000/test/repo2|test/repo2> is forked to <http://localhost:3000/test/repo|test/repo>", pl.Text) 46 }) 47 48 t.Run("Push", func(t *testing.T) { 49 p := pushTestPayload() 50 51 pl, err := sc.Push(p) 52 require.NoError(t, err) 53 54 assert.Equal(t, "[test/repo:<http://localhost:3000/test/repo/src/branch/test|test>] 2 new commits pushed by user1", pl.Text) 55 }) 56 57 t.Run("Issue", func(t *testing.T) { 58 p := issueTestPayload() 59 60 p.Action = api.HookIssueOpened 61 pl, err := sc.Issue(p) 62 require.NoError(t, err) 63 64 assert.Equal(t, "[test/repo] Issue opened: <http://localhost:3000/test/repo/issues/2|#2 crash> by user1", pl.Text) 65 66 p.Action = api.HookIssueClosed 67 pl, err = sc.Issue(p) 68 require.NoError(t, err) 69 70 assert.Equal(t, "[test/repo] Issue closed: <http://localhost:3000/test/repo/issues/2|#2 crash> by user1", pl.Text) 71 }) 72 73 t.Run("IssueComment", func(t *testing.T) { 74 p := issueCommentTestPayload() 75 76 pl, err := sc.IssueComment(p) 77 require.NoError(t, err) 78 79 assert.Equal(t, "[test/repo] New comment on issue <http://localhost:3000/test/repo/issues/2|#2 crash> by user1", pl.Text) 80 }) 81 82 t.Run("PullRequest", func(t *testing.T) { 83 p := pullRequestTestPayload() 84 85 pl, err := sc.PullRequest(p) 86 require.NoError(t, err) 87 88 assert.Equal(t, "[test/repo] Pull request opened: <http://localhost:3000/test/repo/pulls/12|#12 Fix bug> by user1", pl.Text) 89 }) 90 91 t.Run("PullRequestComment", func(t *testing.T) { 92 p := pullRequestCommentTestPayload() 93 94 pl, err := sc.IssueComment(p) 95 require.NoError(t, err) 96 97 assert.Equal(t, "[test/repo] New comment on pull request <http://localhost:3000/test/repo/pulls/12|#12 Fix bug> by user1", pl.Text) 98 }) 99 100 t.Run("Review", func(t *testing.T) { 101 p := pullRequestTestPayload() 102 p.Action = api.HookIssueReviewed 103 104 pl, err := sc.Review(p, webhook_module.HookEventPullRequestReviewApproved) 105 require.NoError(t, err) 106 107 assert.Equal(t, "[test/repo] Pull request review approved: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by user1", pl.Text) 108 }) 109 110 t.Run("Repository", func(t *testing.T) { 111 p := repositoryTestPayload() 112 113 pl, err := sc.Repository(p) 114 require.NoError(t, err) 115 116 assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Repository created by user1", pl.Text) 117 }) 118 119 t.Run("Package", func(t *testing.T) { 120 p := packageTestPayload() 121 122 pl, err := sc.Package(p) 123 require.NoError(t, err) 124 125 assert.Equal(t, "Package created: <http://localhost:3000/user1/-/packages/container/GiteaContainer/latest|GiteaContainer:latest> by user1", pl.Text) 126 }) 127 128 t.Run("Wiki", func(t *testing.T) { 129 p := wikiTestPayload() 130 131 p.Action = api.HookWikiCreated 132 pl, err := sc.Wiki(p) 133 require.NoError(t, err) 134 135 assert.Equal(t, "[test/repo] New wiki page '<http://localhost:3000/test/repo/wiki/index|index>' (Wiki change comment) by user1", pl.Text) 136 137 p.Action = api.HookWikiEdited 138 pl, err = sc.Wiki(p) 139 require.NoError(t, err) 140 141 assert.Equal(t, "[test/repo] Wiki page '<http://localhost:3000/test/repo/wiki/index|index>' edited (Wiki change comment) by user1", pl.Text) 142 143 p.Action = api.HookWikiDeleted 144 pl, err = sc.Wiki(p) 145 require.NoError(t, err) 146 147 assert.Equal(t, "[test/repo] Wiki page '<http://localhost:3000/test/repo/wiki/index|index>' deleted by user1", pl.Text) 148 }) 149 150 t.Run("Release", func(t *testing.T) { 151 p := pullReleaseTestPayload() 152 153 pl, err := sc.Release(p) 154 require.NoError(t, err) 155 156 assert.Equal(t, "[test/repo] Release created: <http://localhost:3000/test/repo/releases/tag/v1.0|v1.0> by user1", pl.Text) 157 }) 158} 159 160func TestSlackJSONPayload(t *testing.T) { 161 p := pushTestPayload() 162 data, err := p.JSONPayload() 163 require.NoError(t, err) 164 165 hook := &webhook_model.Webhook{ 166 RepoID: 3, 167 IsActive: true, 168 Type: webhook_module.SLACK, 169 URL: "https://slack.example.com/", 170 Meta: `{}`, 171 HTTPMethod: "POST", 172 } 173 task := &webhook_model.HookTask{ 174 HookID: hook.ID, 175 EventType: webhook_module.HookEventPush, 176 PayloadContent: string(data), 177 PayloadVersion: 2, 178 } 179 180 req, reqBody, err := slackHandler{}.NewRequest(t.Context(), hook, task) 181 require.NotNil(t, req) 182 require.NotNil(t, reqBody) 183 require.NoError(t, err) 184 185 assert.Equal(t, "POST", req.Method) 186 assert.Equal(t, "https://slack.example.com/", req.URL.String()) 187 assert.Equal(t, "sha256=", req.Header.Get("X-Hub-Signature-256")) 188 assert.Equal(t, "application/json", req.Header.Get("Content-Type")) 189 var body SlackPayload 190 err = json.NewDecoder(req.Body).Decode(&body) 191 require.NoError(t, err) 192 assert.Equal(t, "[test/repo:<http://localhost:3000/test/repo/src/branch/test|test>] 2 new commits pushed by user1", body.Text) 193} 194 195func TestIsValidSlackChannel(t *testing.T) { 196 tt := []struct { 197 channelName string 198 expected bool 199 }{ 200 {"gitea", true}, 201 {"#gitea", true}, 202 {" ", false}, 203 {"#", false}, 204 {" #", false}, 205 {"gitea ", false}, 206 {" gitea", false}, 207 } 208 209 for _, v := range tt { 210 assert.Equal(t, v.expected, IsValidSlackChannel(v.channelName)) 211 } 212} 213 214func TestSlackMetadata(t *testing.T) { 215 w := &webhook_model.Webhook{ 216 Meta: `{"channel": "foo", "username": "username", "color": "blue"}`, 217 } 218 slackHook := slackHandler{}.Metadata(w) 219 assert.Equal(t, SlackMeta{ 220 Channel: "foo", 221 Username: "username", 222 Color: "blue", 223 }, 224 *slackHook.(*SlackMeta)) 225} 226 227func TestSlackToHook(t *testing.T) { 228 w := &webhook_model.Webhook{ 229 Type: webhook_module.SLACK, 230 ContentType: webhook_model.ContentTypeJSON, 231 URL: "https://slack.example.com", 232 Meta: `{"channel": "foo", "username": "username", "color": "blue"}`, 233 HookEvent: &webhook_module.HookEvent{ 234 PushOnly: true, 235 SendEverything: false, 236 ChooseEvents: false, 237 HookEvents: webhook_module.HookEvents{ 238 Create: false, 239 Push: true, 240 PullRequest: false, 241 }, 242 }, 243 } 244 h, err := ToHook("repoLink", w) 245 require.NoError(t, err) 246 247 assert.Equal(t, map[string]string{ 248 "url": "https://slack.example.com", 249 "content_type": "json", 250 251 "channel": "foo", 252 "color": "blue", 253 "icon_url": "", 254 "username": "username", 255 }, h.Config) 256 assert.Equal(t, "https://slack.example.com", h.URL) 257 assert.Equal(t, "json", h.ContentType) 258 assert.Equal(t, &SlackMeta{ 259 Channel: "foo", 260 Username: "username", 261 IconURL: "", 262 Color: "blue", 263 }, h.Metadata) 264}