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.

api_repo_secrets_test.go 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "fmt"
  6. "net/http"
  7. "testing"
  8. auth_model "code.gitea.io/gitea/models/auth"
  9. repo_model "code.gitea.io/gitea/models/repo"
  10. "code.gitea.io/gitea/models/unittest"
  11. user_model "code.gitea.io/gitea/models/user"
  12. api "code.gitea.io/gitea/modules/structs"
  13. "code.gitea.io/gitea/tests"
  14. )
  15. func TestAPIRepoSecrets(t *testing.T) {
  16. defer tests.PrepareTestEnv(t)()
  17. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  18. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  19. session := loginUser(t, user.Name)
  20. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  21. t.Run("Create", func(t *testing.T) {
  22. cases := []struct {
  23. Name string
  24. ExpectedStatus int
  25. }{
  26. {
  27. Name: "",
  28. ExpectedStatus: http.StatusNotFound,
  29. },
  30. {
  31. Name: "-",
  32. ExpectedStatus: http.StatusBadRequest,
  33. },
  34. {
  35. Name: "_",
  36. ExpectedStatus: http.StatusCreated,
  37. },
  38. {
  39. Name: "secret",
  40. ExpectedStatus: http.StatusCreated,
  41. },
  42. {
  43. Name: "2secret",
  44. ExpectedStatus: http.StatusBadRequest,
  45. },
  46. {
  47. Name: "GITEA_secret",
  48. ExpectedStatus: http.StatusBadRequest,
  49. },
  50. {
  51. Name: "GITHUB_secret",
  52. ExpectedStatus: http.StatusBadRequest,
  53. },
  54. }
  55. for _, c := range cases {
  56. req := NewRequestWithJSON(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/actions/secrets/%s?token=%s", repo.FullName(), c.Name, token), api.CreateOrUpdateSecretOption{
  57. Data: "data",
  58. })
  59. MakeRequest(t, req, c.ExpectedStatus)
  60. }
  61. })
  62. t.Run("Update", func(t *testing.T) {
  63. name := "update_secret"
  64. url := fmt.Sprintf("/api/v1/repos/%s/actions/secrets/%s?token=%s", repo.FullName(), name, token)
  65. req := NewRequestWithJSON(t, "PUT", url, api.CreateOrUpdateSecretOption{
  66. Data: "initial",
  67. })
  68. MakeRequest(t, req, http.StatusCreated)
  69. req = NewRequestWithJSON(t, "PUT", url, api.CreateOrUpdateSecretOption{
  70. Data: "changed",
  71. })
  72. MakeRequest(t, req, http.StatusNoContent)
  73. })
  74. t.Run("Delete", func(t *testing.T) {
  75. name := "delete_secret"
  76. url := fmt.Sprintf("/api/v1/repos/%s/actions/secrets/%s?token=%s", repo.FullName(), name, token)
  77. req := NewRequestWithJSON(t, "PUT", url, api.CreateOrUpdateSecretOption{
  78. Data: "initial",
  79. })
  80. MakeRequest(t, req, http.StatusCreated)
  81. req = NewRequest(t, "DELETE", url)
  82. MakeRequest(t, req, http.StatusNoContent)
  83. req = NewRequest(t, "DELETE", url)
  84. MakeRequest(t, req, http.StatusNotFound)
  85. req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/actions/secrets/000?token=%s", repo.FullName(), token))
  86. MakeRequest(t, req, http.StatusBadRequest)
  87. })
  88. }