@@ -7,12 +7,92 @@ import (
7
7
"net/http"
8
8
"testing"
9
9
10
+ "code.gitea.io/gitea/models"
11
+ auth_model "code.gitea.io/gitea/models/auth"
12
+ "code.gitea.io/gitea/models/db"
13
+ org_model "code.gitea.io/gitea/models/organization"
14
+ "code.gitea.io/gitea/models/unittest"
15
+ user_model "code.gitea.io/gitea/models/user"
10
16
api "code.gitea.io/gitea/modules/structs"
11
17
"code.gitea.io/gitea/tests"
18
+
19
+ "github.com/stretchr/testify/assert"
12
20
)
13
21
14
22
func TestCreateForkNoLogin (t * testing.T ) {
15
23
defer tests .PrepareTestEnv (t )()
16
24
req := NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {})
17
25
MakeRequest (t , req , http .StatusUnauthorized )
18
26
}
27
+
28
+ func TestAPIForkListLimitedAndPrivateRepos (t * testing.T ) {
29
+ defer tests .PrepareTestEnv (t )()
30
+
31
+ user1Sess := loginUser (t , "user1" )
32
+ user1 := unittest .AssertExistsAndLoadBean (t , & user_model.User {Name : "user1" })
33
+
34
+ // fork into a limited org
35
+ limitedOrg := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 22 })
36
+ assert .EqualValues (t , api .VisibleTypeLimited , limitedOrg .Visibility )
37
+
38
+ ownerTeam1 , err := org_model .OrgFromUser (limitedOrg ).GetOwnerTeam (db .DefaultContext )
39
+ assert .NoError (t , err )
40
+ assert .NoError (t , models .AddTeamMember (db .DefaultContext , ownerTeam1 , user1 ))
41
+ user1Token := getTokenForLoggedInUser (t , user1Sess , auth_model .AccessTokenScopeWriteRepository , auth_model .AccessTokenScopeWriteOrganization )
42
+ req := NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {
43
+ Organization : & limitedOrg .Name ,
44
+ }).AddTokenAuth (user1Token )
45
+ MakeRequest (t , req , http .StatusAccepted )
46
+
47
+ // fork into a private org
48
+ user4Sess := loginUser (t , "user4" )
49
+ user4 := unittest .AssertExistsAndLoadBean (t , & user_model.User {Name : "user4" })
50
+ privateOrg := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 23 })
51
+ assert .EqualValues (t , api .VisibleTypePrivate , privateOrg .Visibility )
52
+
53
+ ownerTeam2 , err := org_model .OrgFromUser (privateOrg ).GetOwnerTeam (db .DefaultContext )
54
+ assert .NoError (t , err )
55
+ assert .NoError (t , models .AddTeamMember (db .DefaultContext , ownerTeam2 , user4 ))
56
+ user4Token := getTokenForLoggedInUser (t , user4Sess , auth_model .AccessTokenScopeWriteRepository , auth_model .AccessTokenScopeWriteOrganization )
57
+ req = NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {
58
+ Organization : & privateOrg .Name ,
59
+ }).AddTokenAuth (user4Token )
60
+ MakeRequest (t , req , http .StatusAccepted )
61
+
62
+ t .Run ("Anonymous" , func (t * testing.T ) {
63
+ defer tests .PrintCurrentTest (t )()
64
+
65
+ req := NewRequest (t , "GET" , "/api/v1/repos/user2/repo1/forks" )
66
+ resp := MakeRequest (t , req , http .StatusOK )
67
+
68
+ var forks []* api.Repository
69
+ DecodeJSON (t , resp , & forks )
70
+
71
+ assert .Empty (t , forks )
72
+ assert .EqualValues (t , "0" , resp .Header ().Get ("X-Total-Count" ))
73
+ })
74
+
75
+ t .Run ("Logged in" , func (t * testing.T ) {
76
+ defer tests .PrintCurrentTest (t )()
77
+
78
+ req := NewRequest (t , "GET" , "/api/v1/repos/user2/repo1/forks" ).AddTokenAuth (user1Token )
79
+ resp := MakeRequest (t , req , http .StatusOK )
80
+
81
+ var forks []* api.Repository
82
+ DecodeJSON (t , resp , & forks )
83
+
84
+ assert .Len (t , forks , 1 )
85
+ assert .EqualValues (t , "1" , resp .Header ().Get ("X-Total-Count" ))
86
+
87
+ assert .NoError (t , models .AddTeamMember (db .DefaultContext , ownerTeam2 , user1 ))
88
+
89
+ req = NewRequest (t , "GET" , "/api/v1/repos/user2/repo1/forks" ).AddTokenAuth (user1Token )
90
+ resp = MakeRequest (t , req , http .StatusOK )
91
+
92
+ forks = []* api.Repository {}
93
+ DecodeJSON (t , resp , & forks )
94
+
95
+ assert .Len (t , forks , 2 )
96
+ assert .EqualValues (t , "2" , resp .Header ().Get ("X-Total-Count" ))
97
+ })
98
+ }
0 commit comments