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