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 }