gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package utils
  4. import (
  5. "net/http"
  6. "testing"
  7. "code.gitea.io/gitea/models/unittest"
  8. "code.gitea.io/gitea/modules/structs"
  9. "code.gitea.io/gitea/services/contexttest"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestTestHookValidation(t *testing.T) {
  13. unittest.PrepareTestEnv(t)
  14. t.Run("Test Validation", func(t *testing.T) {
  15. ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks")
  16. contexttest.LoadRepo(t, ctx, 1)
  17. contexttest.LoadRepoCommit(t, ctx)
  18. contexttest.LoadUser(t, ctx, 2)
  19. checkCreateHookOption(ctx, &structs.CreateHookOption{
  20. Type: "gitea",
  21. Config: map[string]string{
  22. "content_type": "json",
  23. "url": "https://example.com/webhook",
  24. },
  25. })
  26. assert.Equal(t, 0, ctx.Resp.WrittenStatus()) // not written yet
  27. })
  28. t.Run("Test Validation with invalid URL", func(t *testing.T) {
  29. ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks")
  30. contexttest.LoadRepo(t, ctx, 1)
  31. contexttest.LoadRepoCommit(t, ctx)
  32. contexttest.LoadUser(t, ctx, 2)
  33. checkCreateHookOption(ctx, &structs.CreateHookOption{
  34. Type: "gitea",
  35. Config: map[string]string{
  36. "content_type": "json",
  37. "url": "example.com/webhook",
  38. },
  39. })
  40. assert.Equal(t, http.StatusUnprocessableEntity, ctx.Resp.WrittenStatus())
  41. })
  42. t.Run("Test Validation with invalid webhook type", func(t *testing.T) {
  43. ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks")
  44. contexttest.LoadRepo(t, ctx, 1)
  45. contexttest.LoadRepoCommit(t, ctx)
  46. contexttest.LoadUser(t, ctx, 2)
  47. checkCreateHookOption(ctx, &structs.CreateHookOption{
  48. Type: "unknown",
  49. Config: map[string]string{
  50. "content_type": "json",
  51. "url": "example.com/webhook",
  52. },
  53. })
  54. assert.Equal(t, http.StatusUnprocessableEntity, ctx.Resp.WrittenStatus())
  55. })
  56. t.Run("Test Validation with empty content type", func(t *testing.T) {
  57. ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks")
  58. contexttest.LoadRepo(t, ctx, 1)
  59. contexttest.LoadRepoCommit(t, ctx)
  60. contexttest.LoadUser(t, ctx, 2)
  61. checkCreateHookOption(ctx, &structs.CreateHookOption{
  62. Type: "unknown",
  63. Config: map[string]string{
  64. "url": "https://example.com/webhook",
  65. },
  66. })
  67. assert.Equal(t, http.StatusUnprocessableEntity, ctx.Resp.WrittenStatus())
  68. })
  69. }