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  }