code.gitea.io/gitea@v1.22.3/tests/integration/api_user_variables_test.go (about) 1 // Copyright 2024 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 api "code.gitea.io/gitea/modules/structs" 13 "code.gitea.io/gitea/tests" 14 ) 15 16 func TestAPIUserVariables(t *testing.T) { 17 defer tests.PrepareTestEnv(t)() 18 19 session := loginUser(t, "user1") 20 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteUser) 21 22 t.Run("CreateRepoVariable", func(t *testing.T) { 23 cases := []struct { 24 Name string 25 ExpectedStatus int 26 }{ 27 { 28 Name: "-", 29 ExpectedStatus: http.StatusBadRequest, 30 }, 31 { 32 Name: "_", 33 ExpectedStatus: http.StatusNoContent, 34 }, 35 { 36 Name: "TEST_VAR", 37 ExpectedStatus: http.StatusNoContent, 38 }, 39 { 40 Name: "test_var", 41 ExpectedStatus: http.StatusConflict, 42 }, 43 { 44 Name: "ci", 45 ExpectedStatus: http.StatusBadRequest, 46 }, 47 { 48 Name: "123var", 49 ExpectedStatus: http.StatusBadRequest, 50 }, 51 { 52 Name: "var@test", 53 ExpectedStatus: http.StatusBadRequest, 54 }, 55 { 56 Name: "github_var", 57 ExpectedStatus: http.StatusBadRequest, 58 }, 59 { 60 Name: "gitea_var", 61 ExpectedStatus: http.StatusBadRequest, 62 }, 63 } 64 65 for _, c := range cases { 66 req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/user/actions/variables/%s", c.Name), api.CreateVariableOption{ 67 Value: "value", 68 }).AddTokenAuth(token) 69 MakeRequest(t, req, c.ExpectedStatus) 70 } 71 }) 72 73 t.Run("UpdateRepoVariable", func(t *testing.T) { 74 variableName := "test_update_var" 75 url := fmt.Sprintf("/api/v1/user/actions/variables/%s", variableName) 76 req := NewRequestWithJSON(t, "POST", url, api.CreateVariableOption{ 77 Value: "initial_val", 78 }).AddTokenAuth(token) 79 MakeRequest(t, req, http.StatusNoContent) 80 81 cases := []struct { 82 Name string 83 UpdateName string 84 ExpectedStatus int 85 }{ 86 { 87 Name: "not_found_var", 88 ExpectedStatus: http.StatusNotFound, 89 }, 90 { 91 Name: variableName, 92 UpdateName: "1invalid", 93 ExpectedStatus: http.StatusBadRequest, 94 }, 95 { 96 Name: variableName, 97 UpdateName: "invalid@name", 98 ExpectedStatus: http.StatusBadRequest, 99 }, 100 { 101 Name: variableName, 102 UpdateName: "ci", 103 ExpectedStatus: http.StatusBadRequest, 104 }, 105 { 106 Name: variableName, 107 UpdateName: "updated_var_name", 108 ExpectedStatus: http.StatusNoContent, 109 }, 110 { 111 Name: variableName, 112 ExpectedStatus: http.StatusNotFound, 113 }, 114 { 115 Name: "updated_var_name", 116 ExpectedStatus: http.StatusNoContent, 117 }, 118 } 119 120 for _, c := range cases { 121 req := NewRequestWithJSON(t, "PUT", fmt.Sprintf("/api/v1/user/actions/variables/%s", c.Name), api.UpdateVariableOption{ 122 Name: c.UpdateName, 123 Value: "updated_val", 124 }).AddTokenAuth(token) 125 MakeRequest(t, req, c.ExpectedStatus) 126 } 127 }) 128 129 t.Run("DeleteRepoVariable", func(t *testing.T) { 130 variableName := "test_delete_var" 131 url := fmt.Sprintf("/api/v1/user/actions/variables/%s", variableName) 132 133 req := NewRequestWithJSON(t, "POST", url, api.CreateVariableOption{ 134 Value: "initial_val", 135 }).AddTokenAuth(token) 136 MakeRequest(t, req, http.StatusNoContent) 137 138 req = NewRequest(t, "DELETE", url).AddTokenAuth(token) 139 MakeRequest(t, req, http.StatusNoContent) 140 141 req = NewRequest(t, "DELETE", url).AddTokenAuth(token) 142 MakeRequest(t, req, http.StatusNotFound) 143 }) 144 }