code.gitea.io/gitea@v1.21.7/services/webhook/matrix_test.go (about) 1 // Copyright 2020 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 TestMatrixPayload(t *testing.T) { 17 t.Run("Create", func(t *testing.T) { 18 p := createTestPayload() 19 20 d := new(MatrixPayload) 21 pl, err := d.Create(p) 22 require.NoError(t, err) 23 require.NotNil(t, pl) 24 require.IsType(t, &MatrixPayload{}, pl) 25 26 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo):[test](http://localhost:3000/test/repo/src/branch/test)] branch created by user1", pl.(*MatrixPayload).Body) 27 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>:<a href="http://localhost:3000/test/repo/src/branch/test">test</a>] branch created by user1`, pl.(*MatrixPayload).FormattedBody) 28 }) 29 30 t.Run("Delete", func(t *testing.T) { 31 p := deleteTestPayload() 32 33 d := new(MatrixPayload) 34 pl, err := d.Delete(p) 35 require.NoError(t, err) 36 require.NotNil(t, pl) 37 require.IsType(t, &MatrixPayload{}, pl) 38 39 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo):test] branch deleted by user1", pl.(*MatrixPayload).Body) 40 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>:test] branch deleted by user1`, pl.(*MatrixPayload).FormattedBody) 41 }) 42 43 t.Run("Fork", func(t *testing.T) { 44 p := forkTestPayload() 45 46 d := new(MatrixPayload) 47 pl, err := d.Fork(p) 48 require.NoError(t, err) 49 require.NotNil(t, pl) 50 require.IsType(t, &MatrixPayload{}, pl) 51 52 assert.Equal(t, "[test/repo2](http://localhost:3000/test/repo2) is forked to [test/repo](http://localhost:3000/test/repo)", pl.(*MatrixPayload).Body) 53 assert.Equal(t, `<a href="http://localhost:3000/test/repo2">test/repo2</a> is forked to <a href="http://localhost:3000/test/repo">test/repo</a>`, pl.(*MatrixPayload).FormattedBody) 54 }) 55 56 t.Run("Push", func(t *testing.T) { 57 p := pushTestPayload() 58 59 d := new(MatrixPayload) 60 pl, err := d.Push(p) 61 require.NoError(t, err) 62 require.NotNil(t, pl) 63 require.IsType(t, &MatrixPayload{}, pl) 64 65 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] user1 pushed 2 commits to [test](http://localhost:3000/test/repo/src/branch/test):\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778): commit message - user1\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778): commit message - user1", pl.(*MatrixPayload).Body) 66 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] user1 pushed 2 commits to <a href="http://localhost:3000/test/repo/src/branch/test">test</a>:<br><a href="http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778">2020558</a>: commit message - user1<br><a href="http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778">2020558</a>: commit message - user1`, pl.(*MatrixPayload).FormattedBody) 67 }) 68 69 t.Run("Issue", func(t *testing.T) { 70 p := issueTestPayload() 71 72 d := new(MatrixPayload) 73 p.Action = api.HookIssueOpened 74 pl, err := d.Issue(p) 75 require.NoError(t, err) 76 require.NotNil(t, pl) 77 require.IsType(t, &MatrixPayload{}, pl) 78 79 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue opened: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 80 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Issue opened: <a href="http://localhost:3000/test/repo/issues/2">#2 crash</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 81 82 p.Action = api.HookIssueClosed 83 pl, err = d.Issue(p) 84 require.NoError(t, err) 85 require.NotNil(t, pl) 86 require.IsType(t, &MatrixPayload{}, pl) 87 88 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue closed: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 89 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Issue closed: <a href="http://localhost:3000/test/repo/issues/2">#2 crash</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 90 }) 91 92 t.Run("IssueComment", func(t *testing.T) { 93 p := issueCommentTestPayload() 94 95 d := new(MatrixPayload) 96 pl, err := d.IssueComment(p) 97 require.NoError(t, err) 98 require.NotNil(t, pl) 99 require.IsType(t, &MatrixPayload{}, pl) 100 101 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on issue [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 102 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] New comment on issue <a href="http://localhost:3000/test/repo/issues/2">#2 crash</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 103 }) 104 105 t.Run("PullRequest", func(t *testing.T) { 106 p := pullRequestTestPayload() 107 108 d := new(MatrixPayload) 109 pl, err := d.PullRequest(p) 110 require.NoError(t, err) 111 require.NotNil(t, pl) 112 require.IsType(t, &MatrixPayload{}, pl) 113 114 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Pull request opened: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 115 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Pull request opened: <a href="http://localhost:3000/test/repo/pulls/12">#12 Fix bug</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 116 }) 117 118 t.Run("PullRequestComment", func(t *testing.T) { 119 p := pullRequestCommentTestPayload() 120 121 d := new(MatrixPayload) 122 pl, err := d.IssueComment(p) 123 require.NoError(t, err) 124 require.NotNil(t, pl) 125 require.IsType(t, &MatrixPayload{}, pl) 126 127 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on pull request [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 128 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] New comment on pull request <a href="http://localhost:3000/test/repo/pulls/12">#12 Fix bug</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 129 }) 130 131 t.Run("Review", func(t *testing.T) { 132 p := pullRequestTestPayload() 133 p.Action = api.HookIssueReviewed 134 135 d := new(MatrixPayload) 136 pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved) 137 require.NoError(t, err) 138 require.NotNil(t, pl) 139 require.IsType(t, &MatrixPayload{}, pl) 140 141 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Pull request review approved: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 142 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Pull request review approved: <a href="http://localhost:3000/test/repo/pulls/12">#12 Fix bug</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 143 }) 144 145 t.Run("Repository", func(t *testing.T) { 146 p := repositoryTestPayload() 147 148 d := new(MatrixPayload) 149 pl, err := d.Repository(p) 150 require.NoError(t, err) 151 require.NotNil(t, pl) 152 require.IsType(t, &MatrixPayload{}, pl) 153 154 assert.Equal(t, `[[test/repo](http://localhost:3000/test/repo)] Repository created by [user1](https://try.gitea.io/user1)`, pl.(*MatrixPayload).Body) 155 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Repository created by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 156 }) 157 158 t.Run("Package", func(t *testing.T) { 159 p := packageTestPayload() 160 161 d := new(MatrixPayload) 162 pl, err := d.Package(p) 163 require.NoError(t, err) 164 require.NotNil(t, pl) 165 require.IsType(t, &MatrixPayload{}, pl) 166 167 assert.Equal(t, `[[GiteaContainer](http://localhost:3000/user1/-/packages/container/GiteaContainer/latest)] Package published by [user1](https://try.gitea.io/user1)`, pl.(*MatrixPayload).Body) 168 assert.Equal(t, `[<a href="http://localhost:3000/user1/-/packages/container/GiteaContainer/latest">GiteaContainer</a>] Package published by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 169 }) 170 171 t.Run("Wiki", func(t *testing.T) { 172 p := wikiTestPayload() 173 174 d := new(MatrixPayload) 175 p.Action = api.HookWikiCreated 176 pl, err := d.Wiki(p) 177 require.NoError(t, err) 178 require.NotNil(t, pl) 179 require.IsType(t, &MatrixPayload{}, pl) 180 181 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New wiki page '[index](http://localhost:3000/test/repo/wiki/index)' (Wiki change comment) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 182 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] New wiki page '<a href="http://localhost:3000/test/repo/wiki/index">index</a>' (Wiki change comment) by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 183 184 p.Action = api.HookWikiEdited 185 pl, err = d.Wiki(p) 186 require.NoError(t, err) 187 require.NotNil(t, pl) 188 require.IsType(t, &MatrixPayload{}, pl) 189 190 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Wiki page '[index](http://localhost:3000/test/repo/wiki/index)' edited (Wiki change comment) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 191 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Wiki page '<a href="http://localhost:3000/test/repo/wiki/index">index</a>' edited (Wiki change comment) by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 192 193 p.Action = api.HookWikiDeleted 194 pl, err = d.Wiki(p) 195 require.NoError(t, err) 196 require.NotNil(t, pl) 197 require.IsType(t, &MatrixPayload{}, pl) 198 199 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Wiki page '[index](http://localhost:3000/test/repo/wiki/index)' deleted by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 200 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Wiki page '<a href="http://localhost:3000/test/repo/wiki/index">index</a>' deleted by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 201 }) 202 203 t.Run("Release", func(t *testing.T) { 204 p := pullReleaseTestPayload() 205 206 d := new(MatrixPayload) 207 pl, err := d.Release(p) 208 require.NoError(t, err) 209 require.NotNil(t, pl) 210 require.IsType(t, &MatrixPayload{}, pl) 211 212 assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Release created: [v1.0](http://localhost:3000/test/repo/releases/tag/v1.0) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body) 213 assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Release created: <a href="http://localhost:3000/test/repo/releases/tag/v1.0">v1.0</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody) 214 }) 215 } 216 217 func TestMatrixJSONPayload(t *testing.T) { 218 p := pushTestPayload() 219 220 pl, err := new(MatrixPayload).Push(p) 221 require.NoError(t, err) 222 require.NotNil(t, pl) 223 require.IsType(t, &MatrixPayload{}, pl) 224 225 json, err := pl.JSONPayload() 226 require.NoError(t, err) 227 assert.NotEmpty(t, json) 228 } 229 230 func Test_getTxnID(t *testing.T) { 231 type args struct { 232 payload []byte 233 } 234 tests := []struct { 235 name string 236 args args 237 want string 238 wantErr bool 239 }{ 240 { 241 name: "dummy payload", 242 args: args{payload: []byte("Hello World")}, 243 want: "0a4d55a8d778e5022fab701977c5d840bbc486d0", 244 wantErr: false, 245 }, 246 } 247 for _, tt := range tests { 248 t.Run(tt.name, func(t *testing.T) { 249 got, err := getMatrixTxnID(tt.args.payload) 250 if (err != nil) != tt.wantErr { 251 t.Errorf("getMatrixTxnID() error = %v, wantErr %v", err, tt.wantErr) 252 return 253 } 254 assert.Equal(t, tt.want, got) 255 }) 256 } 257 }