You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

packagist_test.go 5.7KB

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