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.

telegram_test.go 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // Copyright 2019 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 TestTelegramPayload(t *testing.T) {
  15. tc := telegramConvertor{}
  16. t.Run("Correct webhook params", func(t *testing.T) {
  17. p := createTelegramPayload("testMsg ")
  18. assert.Equal(t, "HTML", p.ParseMode)
  19. assert.Equal(t, true, p.DisableWebPreview)
  20. assert.Equal(t, "testMsg", p.Message)
  21. })
  22. t.Run("Create", func(t *testing.T) {
  23. p := createTestPayload()
  24. pl, err := tc.Create(p)
  25. require.NoError(t, err)
  26. assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] branch <a href="http://localhost:3000/test/repo/src/test">test</a> created`, pl.Message)
  27. })
  28. t.Run("Delete", func(t *testing.T) {
  29. p := deleteTestPayload()
  30. pl, err := tc.Delete(p)
  31. require.NoError(t, err)
  32. assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] branch <a href="http://localhost:3000/test/repo/src/test">test</a> deleted`, pl.Message)
  33. })
  34. t.Run("Fork", func(t *testing.T) {
  35. p := forkTestPayload()
  36. pl, err := tc.Fork(p)
  37. require.NoError(t, err)
  38. assert.Equal(t, `test/repo2 is forked to <a href="http://localhost:3000/test/repo">test/repo</a>`, pl.Message)
  39. })
  40. t.Run("Push", func(t *testing.T) {
  41. p := pushTestPayload()
  42. pl, err := tc.Push(p)
  43. require.NoError(t, err)
  44. assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>:<a href=\"http://localhost:3000/test/repo/src/test\">test</a>] 2 new commits\n[<a href=\"http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778\">2020558</a>] commit message - user1\n[<a href=\"http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778\">2020558</a>] commit message - user1", pl.Message)
  45. })
  46. t.Run("Issue", func(t *testing.T) {
  47. p := issueTestPayload()
  48. p.Action = api.HookIssueOpened
  49. pl, err := tc.Issue(p)
  50. require.NoError(t, err)
  51. 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>\n\nissue body", pl.Message)
  52. p.Action = api.HookIssueClosed
  53. pl, err = tc.Issue(p)
  54. require.NoError(t, err)
  55. 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.Message)
  56. })
  57. t.Run("IssueComment", func(t *testing.T) {
  58. p := issueCommentTestPayload()
  59. pl, err := tc.IssueComment(p)
  60. require.NoError(t, err)
  61. 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>\nmore info needed", pl.Message)
  62. })
  63. t.Run("PullRequest", func(t *testing.T) {
  64. p := pullRequestTestPayload()
  65. pl, err := tc.PullRequest(p)
  66. require.NoError(t, err)
  67. 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>\nfixes bug #2", pl.Message)
  68. })
  69. t.Run("PullRequestComment", func(t *testing.T) {
  70. p := pullRequestCommentTestPayload()
  71. pl, err := tc.IssueComment(p)
  72. require.NoError(t, err)
  73. 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>\nchanges requested", pl.Message)
  74. })
  75. t.Run("Review", func(t *testing.T) {
  76. p := pullRequestTestPayload()
  77. p.Action = api.HookIssueReviewed
  78. pl, err := tc.Review(p, webhook_module.HookEventPullRequestReviewApproved)
  79. require.NoError(t, err)
  80. assert.Equal(t, "[test/repo] Pull request review approved: #12 Fix bug\ngood job", pl.Message)
  81. })
  82. t.Run("Repository", func(t *testing.T) {
  83. p := repositoryTestPayload()
  84. pl, err := tc.Repository(p)
  85. require.NoError(t, err)
  86. assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Repository created`, pl.Message)
  87. })
  88. t.Run("Package", func(t *testing.T) {
  89. p := packageTestPayload()
  90. pl, err := tc.Package(p)
  91. require.NoError(t, err)
  92. assert.Equal(t, `Package created: <a href="http://localhost:3000/user1/-/packages/container/GiteaContainer/latest">GiteaContainer:latest</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.Message)
  93. })
  94. t.Run("Wiki", func(t *testing.T) {
  95. p := wikiTestPayload()
  96. p.Action = api.HookWikiCreated
  97. pl, err := tc.Wiki(p)
  98. require.NoError(t, err)
  99. 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.Message)
  100. p.Action = api.HookWikiEdited
  101. pl, err = tc.Wiki(p)
  102. require.NoError(t, err)
  103. 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.Message)
  104. p.Action = api.HookWikiDeleted
  105. pl, err = tc.Wiki(p)
  106. require.NoError(t, err)
  107. 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.Message)
  108. })
  109. t.Run("Release", func(t *testing.T) {
  110. p := pullReleaseTestPayload()
  111. pl, err := tc.Release(p)
  112. require.NoError(t, err)
  113. 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.Message)
  114. })
  115. }
  116. func TestTelegramJSONPayload(t *testing.T) {
  117. p := pushTestPayload()
  118. data, err := p.JSONPayload()
  119. require.NoError(t, err)
  120. hook := &webhook_model.Webhook{
  121. RepoID: 3,
  122. IsActive: true,
  123. Type: webhook_module.TELEGRAM,
  124. URL: "https://telegram.example.com/",
  125. Meta: ``,
  126. HTTPMethod: "POST",
  127. }
  128. task := &webhook_model.HookTask{
  129. HookID: hook.ID,
  130. EventType: webhook_module.HookEventPush,
  131. PayloadContent: string(data),
  132. PayloadVersion: 2,
  133. }
  134. req, reqBody, err := newTelegramRequest(context.Background(), hook, task)
  135. require.NotNil(t, req)
  136. require.NotNil(t, reqBody)
  137. require.NoError(t, err)
  138. assert.Equal(t, "POST", req.Method)
  139. assert.Equal(t, "https://telegram.example.com/", req.URL.String())
  140. assert.Equal(t, "sha256=", req.Header.Get("X-Hub-Signature-256"))
  141. assert.Equal(t, "application/json", req.Header.Get("Content-Type"))
  142. var body TelegramPayload
  143. err = json.NewDecoder(req.Body).Decode(&body)
  144. assert.NoError(t, err)
  145. assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>:<a href=\"http://localhost:3000/test/repo/src/test\">test</a>] 2 new commits\n[<a href=\"http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778\">2020558</a>] commit message - user1\n[<a href=\"http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778\">2020558</a>] commit message - user1", body.Message)
  146. }