code.gitea.io/gitea@v1.22.3/tests/integration/api_user_star_test.go (about)

     1  // Copyright 2022 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  	"code.gitea.io/gitea/models/unittest"
    13  	user_model "code.gitea.io/gitea/models/user"
    14  	api "code.gitea.io/gitea/modules/structs"
    15  	"code.gitea.io/gitea/tests"
    16  
    17  	"github.com/stretchr/testify/assert"
    18  )
    19  
    20  func TestAPIStar(t *testing.T) {
    21  	defer tests.PrepareTestEnv(t)()
    22  
    23  	user := "user1"
    24  	repo := "user2/repo1"
    25  
    26  	session := loginUser(t, user)
    27  	token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadUser)
    28  	tokenWithUserScope := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteUser, auth_model.AccessTokenScopeWriteRepository)
    29  
    30  	t.Run("Star", func(t *testing.T) {
    31  		defer tests.PrintCurrentTest(t)()
    32  
    33  		req := NewRequest(t, "PUT", fmt.Sprintf("/api/v1/user/starred/%s", repo)).
    34  			AddTokenAuth(tokenWithUserScope)
    35  		MakeRequest(t, req, http.StatusNoContent)
    36  
    37  		// blocked user can't star a repo
    38  		user34 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 34})
    39  		req = NewRequest(t, "PUT", fmt.Sprintf("/api/v1/user/starred/%s", repo)).
    40  			AddTokenAuth(getUserToken(t, user34.Name, auth_model.AccessTokenScopeWriteRepository))
    41  		MakeRequest(t, req, http.StatusForbidden)
    42  	})
    43  
    44  	t.Run("GetStarredRepos", func(t *testing.T) {
    45  		defer tests.PrintCurrentTest(t)()
    46  
    47  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/starred", user)).
    48  			AddTokenAuth(token)
    49  		resp := MakeRequest(t, req, http.StatusOK)
    50  
    51  		assert.Equal(t, "1", resp.Header().Get("X-Total-Count"))
    52  
    53  		var repos []api.Repository
    54  		DecodeJSON(t, resp, &repos)
    55  		assert.Len(t, repos, 1)
    56  		assert.Equal(t, repo, repos[0].FullName)
    57  	})
    58  
    59  	t.Run("GetMyStarredRepos", func(t *testing.T) {
    60  		defer tests.PrintCurrentTest(t)()
    61  
    62  		req := NewRequest(t, "GET", "/api/v1/user/starred").
    63  			AddTokenAuth(tokenWithUserScope)
    64  		resp := MakeRequest(t, req, http.StatusOK)
    65  
    66  		assert.Equal(t, "1", resp.Header().Get("X-Total-Count"))
    67  
    68  		var repos []api.Repository
    69  		DecodeJSON(t, resp, &repos)
    70  		assert.Len(t, repos, 1)
    71  		assert.Equal(t, repo, repos[0].FullName)
    72  	})
    73  
    74  	t.Run("IsStarring", func(t *testing.T) {
    75  		defer tests.PrintCurrentTest(t)()
    76  
    77  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/starred/%s", repo)).
    78  			AddTokenAuth(tokenWithUserScope)
    79  		MakeRequest(t, req, http.StatusNoContent)
    80  
    81  		req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/starred/%s", repo+"notexisting")).
    82  			AddTokenAuth(tokenWithUserScope)
    83  		MakeRequest(t, req, http.StatusNotFound)
    84  	})
    85  
    86  	t.Run("Unstar", func(t *testing.T) {
    87  		defer tests.PrintCurrentTest(t)()
    88  
    89  		req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/user/starred/%s", repo)).
    90  			AddTokenAuth(tokenWithUserScope)
    91  		MakeRequest(t, req, http.StatusNoContent)
    92  	})
    93  }