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 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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("List", func(t *testing.T) {
  22. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/secrets", repo.FullName())).
  23. AddTokenAuth(token)
  24. MakeRequest(t, req, http.StatusOK)
  25. })
  26. t.Run("Create", func(t *testing.T) {
  27. cases := []struct {
  28. Name string
  29. ExpectedStatus int
  30. }{
  31. {
  32. Name: "",
  33. ExpectedStatus: http.StatusMethodNotAllowed,
  34. },
  35. {
  36. Name: "-",
  37. ExpectedStatus: http.StatusBadRequest,
  38. },
  39. {
  40. Name: "_",
  41. ExpectedStatus: http.StatusCreated,
  42. },
  43. {
  44. Name: "secret",
  45. ExpectedStatus: http.StatusCreated,
  46. },
  47. {
  48. Name: "2secret",
  49. ExpectedStatus: http.StatusBadRequest,
  50. },
  51. {
  52. Name: "GITEA_secret",
  53. ExpectedStatus: http.StatusBadRequest,
  54. },
  55. {
  56. Name: "GITHUB_secret",
  57. ExpectedStatus: http.StatusBadRequest,
  58. },
  59. }
  60. for _, c := range cases {
  61. req := NewRequestWithJSON(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/actions/secrets/%s", repo.FullName(), c.Name), api.CreateOrUpdateSecretOption{
  62. Data: "data",
  63. }).AddTokenAuth(token)
  64. MakeRequest(t, req, c.ExpectedStatus)
  65. }
  66. })
  67. t.Run("Update", func(t *testing.T) {
  68. name := "update_secret"
  69. url := fmt.Sprintf("/api/v1/repos/%s/actions/secrets/%s", repo.FullName(), name)
  70. req := NewRequestWithJSON(t, "PUT", url, api.CreateOrUpdateSecretOption{
  71. Data: "initial",
  72. }).AddTokenAuth(token)
  73. MakeRequest(t, req, http.StatusCreated)
  74. req = NewRequestWithJSON(t, "PUT", url, api.CreateOrUpdateSecretOption{
  75. Data: "changed",
  76. }).AddTokenAuth(token)
  77. MakeRequest(t, req, http.StatusNoContent)
  78. })
  79. t.Run("Delete", func(t *testing.T) {
  80. name := "delete_secret"
  81. url := fmt.Sprintf("/api/v1/repos/%s/actions/secrets/%s", repo.FullName(), name)
  82. req := NewRequestWithJSON(t, "PUT", url, api.CreateOrUpdateSecretOption{
  83. Data: "initial",
  84. }).AddTokenAuth(token)
  85. MakeRequest(t, req, http.StatusCreated)
  86. req = NewRequest(t, "DELETE", url).
  87. AddTokenAuth(token)
  88. MakeRequest(t, req, http.StatusNoContent)
  89. req = NewRequest(t, "DELETE", url).
  90. AddTokenAuth(token)
  91. MakeRequest(t, req, http.StatusNotFound)
  92. req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/actions/secrets/000", repo.FullName())).
  93. AddTokenAuth(token)
  94. MakeRequest(t, req, http.StatusBadRequest)
  95. })
  96. }