code.gitea.io/gitea@v1.22.3/tests/integration/api_user_follow_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 TestAPIFollow(t *testing.T) {
    21  	defer tests.PrepareTestEnv(t)()
    22  
    23  	user1 := "user4"
    24  	user2 := "user1"
    25  
    26  	session1 := loginUser(t, user1)
    27  	token1 := getTokenForLoggedInUser(t, session1, auth_model.AccessTokenScopeReadUser)
    28  
    29  	session2 := loginUser(t, user2)
    30  	token2 := getTokenForLoggedInUser(t, session2, auth_model.AccessTokenScopeWriteUser)
    31  
    32  	t.Run("Follow", func(t *testing.T) {
    33  		defer tests.PrintCurrentTest(t)()
    34  
    35  		req := NewRequest(t, "PUT", fmt.Sprintf("/api/v1/user/following/%s", user1)).
    36  			AddTokenAuth(token2)
    37  		MakeRequest(t, req, http.StatusNoContent)
    38  
    39  		// blocked user can't follow blocker
    40  		user34 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 34})
    41  		req = NewRequest(t, "PUT", "/api/v1/user/following/user2").
    42  			AddTokenAuth(getUserToken(t, user34.Name, auth_model.AccessTokenScopeWriteUser))
    43  		MakeRequest(t, req, http.StatusForbidden)
    44  	})
    45  
    46  	t.Run("ListFollowing", func(t *testing.T) {
    47  		defer tests.PrintCurrentTest(t)()
    48  
    49  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/following", user2)).
    50  			AddTokenAuth(token2)
    51  		resp := MakeRequest(t, req, http.StatusOK)
    52  
    53  		var users []api.User
    54  		DecodeJSON(t, resp, &users)
    55  		assert.Len(t, users, 1)
    56  		assert.Equal(t, user1, users[0].UserName)
    57  	})
    58  
    59  	t.Run("ListMyFollowing", func(t *testing.T) {
    60  		defer tests.PrintCurrentTest(t)()
    61  
    62  		req := NewRequest(t, "GET", "/api/v1/user/following").
    63  			AddTokenAuth(token2)
    64  		resp := MakeRequest(t, req, http.StatusOK)
    65  
    66  		var users []api.User
    67  		DecodeJSON(t, resp, &users)
    68  		assert.Len(t, users, 1)
    69  		assert.Equal(t, user1, users[0].UserName)
    70  	})
    71  
    72  	t.Run("ListFollowers", func(t *testing.T) {
    73  		defer tests.PrintCurrentTest(t)()
    74  
    75  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/followers", user1)).
    76  			AddTokenAuth(token1)
    77  		resp := MakeRequest(t, req, http.StatusOK)
    78  
    79  		var users []api.User
    80  		DecodeJSON(t, resp, &users)
    81  		assert.Len(t, users, 1)
    82  		assert.Equal(t, user2, users[0].UserName)
    83  	})
    84  
    85  	t.Run("ListMyFollowers", func(t *testing.T) {
    86  		defer tests.PrintCurrentTest(t)()
    87  
    88  		req := NewRequest(t, "GET", "/api/v1/user/followers").
    89  			AddTokenAuth(token1)
    90  		resp := MakeRequest(t, req, http.StatusOK)
    91  
    92  		var users []api.User
    93  		DecodeJSON(t, resp, &users)
    94  		assert.Len(t, users, 1)
    95  		assert.Equal(t, user2, users[0].UserName)
    96  	})
    97  
    98  	t.Run("CheckFollowing", func(t *testing.T) {
    99  		defer tests.PrintCurrentTest(t)()
   100  
   101  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/following/%s", user2, user1)).
   102  			AddTokenAuth(token2)
   103  		MakeRequest(t, req, http.StatusNoContent)
   104  
   105  		req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/following/%s", user1, user2)).
   106  			AddTokenAuth(token2)
   107  		MakeRequest(t, req, http.StatusNotFound)
   108  	})
   109  
   110  	t.Run("CheckMyFollowing", func(t *testing.T) {
   111  		defer tests.PrintCurrentTest(t)()
   112  
   113  		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/following/%s", user1)).
   114  			AddTokenAuth(token2)
   115  		MakeRequest(t, req, http.StatusNoContent)
   116  
   117  		req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/following/%s", user2)).
   118  			AddTokenAuth(token1)
   119  		MakeRequest(t, req, http.StatusNotFound)
   120  	})
   121  
   122  	t.Run("Unfollow", func(t *testing.T) {
   123  		defer tests.PrintCurrentTest(t)()
   124  
   125  		req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/user/following/%s", user1)).
   126  			AddTokenAuth(token2)
   127  		MakeRequest(t, req, http.StatusNoContent)
   128  	})
   129  }