code.gitea.io/gitea@v1.22.3/tests/integration/api_user_watch_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 TestAPIWatch(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  	tokenWithRepoScope := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeReadUser)
    29  
    30  	t.Run("Watch", func(t *testing.T) {
    31  		defer tests.PrintCurrentTest(t)()
    32  
    33  		req := NewRequest(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/subscription", repo)).
    34  			AddTokenAuth(tokenWithRepoScope)
    35  		MakeRequest(t, req, http.StatusOK)
    36  
    37  		// blocked user can't watch a repo
    38  		user34 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 34})
    39  		req = NewRequest(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/subscription", repo)).
    40  			AddTokenAuth(getUserToken(t, user34.Name, auth_model.AccessTokenScopeWriteRepository))
    41  		MakeRequest(t, req, http.StatusForbidden)
    42  	})
    43  
    44  	t.Run("GetWatchedRepos", func(t *testing.T) {
    45  		defer tests.PrintCurrentTest(t)()
    46  
    47  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/subscriptions", 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("GetMyWatchedRepos", func(t *testing.T) {
    60  		defer tests.PrintCurrentTest(t)()
    61  
    62  		req := NewRequest(t, "GET", "/api/v1/user/subscriptions").
    63  			AddTokenAuth(tokenWithRepoScope)
    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("IsWatching", func(t *testing.T) {
    75  		defer tests.PrintCurrentTest(t)()
    76  
    77  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/subscription", repo))
    78  		MakeRequest(t, req, http.StatusUnauthorized)
    79  
    80  		req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/subscription", repo)).
    81  			AddTokenAuth(tokenWithRepoScope)
    82  		MakeRequest(t, req, http.StatusOK)
    83  
    84  		req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/subscription", repo+"notexisting")).
    85  			AddTokenAuth(tokenWithRepoScope)
    86  		MakeRequest(t, req, http.StatusNotFound)
    87  	})
    88  
    89  	t.Run("Unwatch", func(t *testing.T) {
    90  		defer tests.PrintCurrentTest(t)()
    91  
    92  		req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/subscription", repo)).
    93  			AddTokenAuth(tokenWithRepoScope)
    94  		MakeRequest(t, req, http.StatusNoContent)
    95  	})
    96  }