code.gitea.io/gitea@v1.21.7/services/webhook/dingtalk_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 "net/url" 8 "testing" 9 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 TestDingTalkPayload(t *testing.T) { 18 parseRealSingleURL := func(singleURL string) string { 19 if u, err := url.Parse(singleURL); err == nil { 20 assert.Equal(t, "dingtalk", u.Scheme) 21 assert.Equal(t, "dingtalkclient", u.Host) 22 assert.Equal(t, "/page/link", u.Path) 23 return u.Query().Get("url") 24 } 25 return "" 26 } 27 28 t.Run("Create", func(t *testing.T) { 29 p := createTestPayload() 30 31 d := new(DingtalkPayload) 32 pl, err := d.Create(p) 33 require.NoError(t, err) 34 require.NotNil(t, pl) 35 require.IsType(t, &DingtalkPayload{}, pl) 36 37 assert.Equal(t, "[test/repo] branch test created", pl.(*DingtalkPayload).ActionCard.Text) 38 assert.Equal(t, "[test/repo] branch test created", pl.(*DingtalkPayload).ActionCard.Title) 39 assert.Equal(t, "view ref test", pl.(*DingtalkPayload).ActionCard.SingleTitle) 40 assert.Equal(t, "http://localhost:3000/test/repo/src/test", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 41 }) 42 43 t.Run("Delete", func(t *testing.T) { 44 p := deleteTestPayload() 45 46 d := new(DingtalkPayload) 47 pl, err := d.Delete(p) 48 require.NoError(t, err) 49 require.NotNil(t, pl) 50 require.IsType(t, &DingtalkPayload{}, pl) 51 52 assert.Equal(t, "[test/repo] branch test deleted", pl.(*DingtalkPayload).ActionCard.Text) 53 assert.Equal(t, "[test/repo] branch test deleted", pl.(*DingtalkPayload).ActionCard.Title) 54 assert.Equal(t, "view ref test", pl.(*DingtalkPayload).ActionCard.SingleTitle) 55 assert.Equal(t, "http://localhost:3000/test/repo/src/test", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 56 }) 57 58 t.Run("Fork", func(t *testing.T) { 59 p := forkTestPayload() 60 61 d := new(DingtalkPayload) 62 pl, err := d.Fork(p) 63 require.NoError(t, err) 64 require.NotNil(t, pl) 65 require.IsType(t, &DingtalkPayload{}, pl) 66 67 assert.Equal(t, "test/repo2 is forked to test/repo", pl.(*DingtalkPayload).ActionCard.Text) 68 assert.Equal(t, "test/repo2 is forked to test/repo", pl.(*DingtalkPayload).ActionCard.Title) 69 assert.Equal(t, "view forked repo test/repo", pl.(*DingtalkPayload).ActionCard.SingleTitle) 70 assert.Equal(t, "http://localhost:3000/test/repo", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 71 }) 72 73 t.Run("Push", func(t *testing.T) { 74 p := pushTestPayload() 75 76 d := new(DingtalkPayload) 77 pl, err := d.Push(p) 78 require.NoError(t, err) 79 require.NotNil(t, pl) 80 require.IsType(t, &DingtalkPayload{}, pl) 81 82 assert.Equal(t, "[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1\r\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1", pl.(*DingtalkPayload).ActionCard.Text) 83 assert.Equal(t, "[test/repo:test] 2 new commits", pl.(*DingtalkPayload).ActionCard.Title) 84 assert.Equal(t, "view commits", pl.(*DingtalkPayload).ActionCard.SingleTitle) 85 assert.Equal(t, "http://localhost:3000/test/repo/src/test", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 86 }) 87 88 t.Run("Issue", func(t *testing.T) { 89 p := issueTestPayload() 90 91 d := new(DingtalkPayload) 92 p.Action = api.HookIssueOpened 93 pl, err := d.Issue(p) 94 require.NoError(t, err) 95 require.NotNil(t, pl) 96 require.IsType(t, &DingtalkPayload{}, pl) 97 98 assert.Equal(t, "[test/repo] Issue opened: #2 crash by user1\r\n\r\nissue body", pl.(*DingtalkPayload).ActionCard.Text) 99 assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title) 100 assert.Equal(t, "view issue", pl.(*DingtalkPayload).ActionCard.SingleTitle) 101 assert.Equal(t, "http://localhost:3000/test/repo/issues/2", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 102 103 p.Action = api.HookIssueClosed 104 pl, err = d.Issue(p) 105 require.NoError(t, err) 106 require.NotNil(t, pl) 107 require.IsType(t, &DingtalkPayload{}, pl) 108 109 assert.Equal(t, "[test/repo] Issue closed: #2 crash by user1", pl.(*DingtalkPayload).ActionCard.Text) 110 assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title) 111 assert.Equal(t, "view issue", pl.(*DingtalkPayload).ActionCard.SingleTitle) 112 assert.Equal(t, "http://localhost:3000/test/repo/issues/2", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 113 }) 114 115 t.Run("IssueComment", func(t *testing.T) { 116 p := issueCommentTestPayload() 117 118 d := new(DingtalkPayload) 119 pl, err := d.IssueComment(p) 120 require.NoError(t, err) 121 require.NotNil(t, pl) 122 require.IsType(t, &DingtalkPayload{}, pl) 123 124 assert.Equal(t, "[test/repo] New comment on issue #2 crash by user1\r\n\r\nmore info needed", pl.(*DingtalkPayload).ActionCard.Text) 125 assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title) 126 assert.Equal(t, "view issue comment", pl.(*DingtalkPayload).ActionCard.SingleTitle) 127 assert.Equal(t, "http://localhost:3000/test/repo/issues/2#issuecomment-4", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 128 }) 129 130 t.Run("PullRequest", func(t *testing.T) { 131 p := pullRequestTestPayload() 132 133 d := new(DingtalkPayload) 134 pl, err := d.PullRequest(p) 135 require.NoError(t, err) 136 require.NotNil(t, pl) 137 require.IsType(t, &DingtalkPayload{}, pl) 138 139 assert.Equal(t, "[test/repo] Pull request opened: #12 Fix bug by user1\r\n\r\nfixes bug #2", pl.(*DingtalkPayload).ActionCard.Text) 140 assert.Equal(t, "#12 Fix bug", pl.(*DingtalkPayload).ActionCard.Title) 141 assert.Equal(t, "view pull request", pl.(*DingtalkPayload).ActionCard.SingleTitle) 142 assert.Equal(t, "http://localhost:3000/test/repo/pulls/12", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 143 }) 144 145 t.Run("PullRequestComment", func(t *testing.T) { 146 p := pullRequestCommentTestPayload() 147 148 d := new(DingtalkPayload) 149 pl, err := d.IssueComment(p) 150 require.NoError(t, err) 151 require.NotNil(t, pl) 152 require.IsType(t, &DingtalkPayload{}, pl) 153 154 assert.Equal(t, "[test/repo] New comment on pull request #12 Fix bug by user1\r\n\r\nchanges requested", pl.(*DingtalkPayload).ActionCard.Text) 155 assert.Equal(t, "#12 Fix bug", pl.(*DingtalkPayload).ActionCard.Title) 156 assert.Equal(t, "view issue comment", pl.(*DingtalkPayload).ActionCard.SingleTitle) 157 assert.Equal(t, "http://localhost:3000/test/repo/pulls/12#issuecomment-4", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 158 }) 159 160 t.Run("Review", func(t *testing.T) { 161 p := pullRequestTestPayload() 162 p.Action = api.HookIssueReviewed 163 164 d := new(DingtalkPayload) 165 pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved) 166 require.NoError(t, err) 167 require.NotNil(t, pl) 168 require.IsType(t, &DingtalkPayload{}, pl) 169 170 assert.Equal(t, "[test/repo] Pull request review approved : #12 Fix bug\r\n\r\ngood job", pl.(*DingtalkPayload).ActionCard.Text) 171 assert.Equal(t, "[test/repo] Pull request review approved : #12 Fix bug", pl.(*DingtalkPayload).ActionCard.Title) 172 assert.Equal(t, "view pull request", pl.(*DingtalkPayload).ActionCard.SingleTitle) 173 assert.Equal(t, "http://localhost:3000/test/repo/pulls/12", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 174 }) 175 176 t.Run("Repository", func(t *testing.T) { 177 p := repositoryTestPayload() 178 179 d := new(DingtalkPayload) 180 pl, err := d.Repository(p) 181 require.NoError(t, err) 182 require.NotNil(t, pl) 183 require.IsType(t, &DingtalkPayload{}, pl) 184 185 assert.Equal(t, "[test/repo] Repository created", pl.(*DingtalkPayload).ActionCard.Text) 186 assert.Equal(t, "[test/repo] Repository created", pl.(*DingtalkPayload).ActionCard.Title) 187 assert.Equal(t, "view repository", pl.(*DingtalkPayload).ActionCard.SingleTitle) 188 assert.Equal(t, "http://localhost:3000/test/repo", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 189 }) 190 191 t.Run("Package", func(t *testing.T) { 192 p := packageTestPayload() 193 194 d := new(DingtalkPayload) 195 pl, err := d.Package(p) 196 require.NoError(t, err) 197 require.NotNil(t, pl) 198 require.IsType(t, &DingtalkPayload{}, pl) 199 200 assert.Equal(t, "Package created: GiteaContainer:latest by user1", pl.(*DingtalkPayload).ActionCard.Text) 201 assert.Equal(t, "Package created: GiteaContainer:latest by user1", pl.(*DingtalkPayload).ActionCard.Title) 202 assert.Equal(t, "view package", pl.(*DingtalkPayload).ActionCard.SingleTitle) 203 assert.Equal(t, "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 204 }) 205 206 t.Run("Wiki", func(t *testing.T) { 207 p := wikiTestPayload() 208 209 d := new(DingtalkPayload) 210 p.Action = api.HookWikiCreated 211 pl, err := d.Wiki(p) 212 require.NoError(t, err) 213 require.NotNil(t, pl) 214 require.IsType(t, &DingtalkPayload{}, pl) 215 216 assert.Equal(t, "[test/repo] New wiki page 'index' (Wiki change comment) by user1", pl.(*DingtalkPayload).ActionCard.Text) 217 assert.Equal(t, "[test/repo] New wiki page 'index' (Wiki change comment) by user1", pl.(*DingtalkPayload).ActionCard.Title) 218 assert.Equal(t, "view wiki", pl.(*DingtalkPayload).ActionCard.SingleTitle) 219 assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 220 221 p.Action = api.HookWikiEdited 222 pl, err = d.Wiki(p) 223 require.NoError(t, err) 224 require.NotNil(t, pl) 225 require.IsType(t, &DingtalkPayload{}, pl) 226 227 assert.Equal(t, "[test/repo] Wiki page 'index' edited (Wiki change comment) by user1", pl.(*DingtalkPayload).ActionCard.Text) 228 assert.Equal(t, "[test/repo] Wiki page 'index' edited (Wiki change comment) by user1", pl.(*DingtalkPayload).ActionCard.Title) 229 assert.Equal(t, "view wiki", pl.(*DingtalkPayload).ActionCard.SingleTitle) 230 assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 231 232 p.Action = api.HookWikiDeleted 233 pl, err = d.Wiki(p) 234 require.NoError(t, err) 235 require.NotNil(t, pl) 236 require.IsType(t, &DingtalkPayload{}, pl) 237 238 assert.Equal(t, "[test/repo] Wiki page 'index' deleted by user1", pl.(*DingtalkPayload).ActionCard.Text) 239 assert.Equal(t, "[test/repo] Wiki page 'index' deleted by user1", pl.(*DingtalkPayload).ActionCard.Title) 240 assert.Equal(t, "view wiki", pl.(*DingtalkPayload).ActionCard.SingleTitle) 241 assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 242 }) 243 244 t.Run("Release", func(t *testing.T) { 245 p := pullReleaseTestPayload() 246 247 d := new(DingtalkPayload) 248 pl, err := d.Release(p) 249 require.NoError(t, err) 250 require.NotNil(t, pl) 251 require.IsType(t, &DingtalkPayload{}, pl) 252 253 assert.Equal(t, "[test/repo] Release created: v1.0 by user1", pl.(*DingtalkPayload).ActionCard.Text) 254 assert.Equal(t, "[test/repo] Release created: v1.0 by user1", pl.(*DingtalkPayload).ActionCard.Title) 255 assert.Equal(t, "view release", pl.(*DingtalkPayload).ActionCard.SingleTitle) 256 assert.Equal(t, "http://localhost:3000/test/repo/releases/tag/v1.0", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL)) 257 }) 258 } 259 260 func TestDingTalkJSONPayload(t *testing.T) { 261 p := pushTestPayload() 262 263 pl, err := new(DingtalkPayload).Push(p) 264 require.NoError(t, err) 265 require.NotNil(t, pl) 266 require.IsType(t, &DingtalkPayload{}, pl) 267 268 json, err := pl.JSONPayload() 269 require.NoError(t, err) 270 assert.NotEmpty(t, json) 271 }