code.gitea.io/gitea@v1.22.3/services/webhook/packagist_test.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package webhook 5 6 import ( 7 "context" 8 "testing" 9 10 webhook_model "code.gitea.io/gitea/models/webhook" 11 "code.gitea.io/gitea/modules/json" 12 api "code.gitea.io/gitea/modules/structs" 13 webhook_module "code.gitea.io/gitea/modules/webhook" 14 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func TestPackagistPayload(t *testing.T) { 20 pc := packagistConvertor{ 21 PackageURL: "https://packagist.org/packages/example", 22 } 23 t.Run("Create", func(t *testing.T) { 24 p := createTestPayload() 25 26 pl, err := pc.Create(p) 27 require.NoError(t, err) 28 require.Equal(t, pl, PackagistPayload{}) 29 }) 30 31 t.Run("Delete", func(t *testing.T) { 32 p := deleteTestPayload() 33 34 pl, err := pc.Delete(p) 35 require.NoError(t, err) 36 require.Equal(t, pl, PackagistPayload{}) 37 }) 38 39 t.Run("Fork", func(t *testing.T) { 40 p := forkTestPayload() 41 42 pl, err := pc.Fork(p) 43 require.NoError(t, err) 44 require.Equal(t, pl, PackagistPayload{}) 45 }) 46 47 t.Run("Push", func(t *testing.T) { 48 p := pushTestPayload() 49 50 pl, err := pc.Push(p) 51 require.NoError(t, err) 52 53 assert.Equal(t, "https://packagist.org/packages/example", pl.PackagistRepository.URL) 54 }) 55 56 t.Run("Issue", func(t *testing.T) { 57 p := issueTestPayload() 58 59 p.Action = api.HookIssueOpened 60 pl, err := pc.Issue(p) 61 require.NoError(t, err) 62 require.Equal(t, pl, PackagistPayload{}) 63 64 p.Action = api.HookIssueClosed 65 pl, err = pc.Issue(p) 66 require.NoError(t, err) 67 require.Equal(t, pl, PackagistPayload{}) 68 }) 69 70 t.Run("IssueComment", func(t *testing.T) { 71 p := issueCommentTestPayload() 72 73 pl, err := pc.IssueComment(p) 74 require.NoError(t, err) 75 require.Equal(t, pl, PackagistPayload{}) 76 }) 77 78 t.Run("PullRequest", func(t *testing.T) { 79 p := pullRequestTestPayload() 80 81 pl, err := pc.PullRequest(p) 82 require.NoError(t, err) 83 require.Equal(t, pl, PackagistPayload{}) 84 }) 85 86 t.Run("PullRequestComment", func(t *testing.T) { 87 p := pullRequestCommentTestPayload() 88 89 pl, err := pc.IssueComment(p) 90 require.NoError(t, err) 91 require.Equal(t, pl, PackagistPayload{}) 92 }) 93 94 t.Run("Review", func(t *testing.T) { 95 p := pullRequestTestPayload() 96 p.Action = api.HookIssueReviewed 97 98 pl, err := pc.Review(p, webhook_module.HookEventPullRequestReviewApproved) 99 require.NoError(t, err) 100 require.Equal(t, pl, PackagistPayload{}) 101 }) 102 103 t.Run("Repository", func(t *testing.T) { 104 p := repositoryTestPayload() 105 106 pl, err := pc.Repository(p) 107 require.NoError(t, err) 108 require.Equal(t, pl, PackagistPayload{}) 109 }) 110 111 t.Run("Package", func(t *testing.T) { 112 p := packageTestPayload() 113 114 pl, err := pc.Package(p) 115 require.NoError(t, err) 116 require.Equal(t, pl, PackagistPayload{}) 117 }) 118 119 t.Run("Wiki", func(t *testing.T) { 120 p := wikiTestPayload() 121 122 p.Action = api.HookWikiCreated 123 pl, err := pc.Wiki(p) 124 require.NoError(t, err) 125 require.Equal(t, pl, PackagistPayload{}) 126 127 p.Action = api.HookWikiEdited 128 pl, err = pc.Wiki(p) 129 require.NoError(t, err) 130 require.Equal(t, pl, PackagistPayload{}) 131 132 p.Action = api.HookWikiDeleted 133 pl, err = pc.Wiki(p) 134 require.NoError(t, err) 135 require.Equal(t, pl, PackagistPayload{}) 136 }) 137 138 t.Run("Release", func(t *testing.T) { 139 p := pullReleaseTestPayload() 140 141 pl, err := pc.Release(p) 142 require.NoError(t, err) 143 require.Equal(t, pl, PackagistPayload{}) 144 }) 145 } 146 147 func TestPackagistJSONPayload(t *testing.T) { 148 p := pushTestPayload() 149 data, err := p.JSONPayload() 150 require.NoError(t, err) 151 152 hook := &webhook_model.Webhook{ 153 RepoID: 3, 154 IsActive: true, 155 Type: webhook_module.PACKAGIST, 156 URL: "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN", 157 Meta: `{"package_url":"https://packagist.org/packages/example"}`, 158 HTTPMethod: "POST", 159 } 160 task := &webhook_model.HookTask{ 161 HookID: hook.ID, 162 EventType: webhook_module.HookEventPush, 163 PayloadContent: string(data), 164 PayloadVersion: 2, 165 } 166 167 req, reqBody, err := newPackagistRequest(context.Background(), hook, task) 168 require.NotNil(t, req) 169 require.NotNil(t, reqBody) 170 require.NoError(t, err) 171 172 assert.Equal(t, "POST", req.Method) 173 assert.Equal(t, "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN", req.URL.String()) 174 assert.Equal(t, "sha256=", req.Header.Get("X-Hub-Signature-256")) 175 assert.Equal(t, "application/json", req.Header.Get("Content-Type")) 176 var body PackagistPayload 177 err = json.NewDecoder(req.Body).Decode(&body) 178 assert.NoError(t, err) 179 assert.Equal(t, "https://packagist.org/packages/example", body.PackagistRepository.URL) 180 } 181 182 func TestPackagistEmptyPayload(t *testing.T) { 183 p := createTestPayload() 184 data, err := p.JSONPayload() 185 require.NoError(t, err) 186 187 hook := &webhook_model.Webhook{ 188 RepoID: 3, 189 IsActive: true, 190 Type: webhook_module.PACKAGIST, 191 URL: "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN", 192 Meta: `{"package_url":"https://packagist.org/packages/example"}`, 193 HTTPMethod: "POST", 194 } 195 task := &webhook_model.HookTask{ 196 HookID: hook.ID, 197 EventType: webhook_module.HookEventCreate, 198 PayloadContent: string(data), 199 PayloadVersion: 2, 200 } 201 202 req, reqBody, err := newPackagistRequest(context.Background(), hook, task) 203 require.NotNil(t, req) 204 require.NotNil(t, reqBody) 205 require.NoError(t, err) 206 207 assert.Equal(t, "POST", req.Method) 208 assert.Equal(t, "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN", req.URL.String()) 209 assert.Equal(t, "sha256=", req.Header.Get("X-Hub-Signature-256")) 210 assert.Equal(t, "application/json", req.Header.Get("Content-Type")) 211 var body PackagistPayload 212 err = json.NewDecoder(req.Body).Decode(&body) 213 assert.NoError(t, err) 214 assert.Equal(t, "", body.PackagistRepository.URL) 215 }