@@ -7,12 +7,108 @@ import (
77 "net/http"
88 "testing"
99
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"
16+ "code.gitea.io/gitea/modules/structs"
1017 api "code.gitea.io/gitea/modules/structs"
1118 "code.gitea.io/gitea/tests"
19+
20+ "github.com/stretchr/testify/assert"
1221)
1322
1423func TestCreateForkNoLogin (t * testing.T ) {
1524 defer tests .PrepareTestEnv (t )()
1625 req := NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {})
1726 MakeRequest (t , req , http .StatusUnauthorized )
1827}
28+
29+ func TestAPIForkListLimitedAndPrivateRepos (t * testing.T ) {
30+ defer tests .PrepareTestEnv (t )()
31+
32+ user1Sess := loginUser (t , "user1" )
33+ user1 := unittest .AssertExistsAndLoadBean (t , & user_model.User {Name : "user1" })
34+ limitedOrg := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 22 })
35+ assert .EqualValues (t , structs .VisibleTypeLimited , limitedOrg .Visibility )
36+
37+ ownerTeam1 , err := org_model .OrgFromUser (limitedOrg ).GetOwnerTeam (db .DefaultContext )
38+ assert .NoError (t , err )
39+ assert .NoError (t , models .AddTeamMember (db .DefaultContext , ownerTeam1 , user1 ))
40+ defer func () {
41+ models .RemoveTeamMember (db .DefaultContext , ownerTeam1 , user1 )
42+ }()
43+
44+ user1Token := getTokenForLoggedInUser (t , user1Sess ,
45+ auth_model .AccessTokenScopeWriteRepository ,
46+ auth_model .AccessTokenScopeWriteOrganization )
47+
48+ req := NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {
49+ Organization : & limitedOrg .Name ,
50+ }).AddTokenAuth (user1Token )
51+ MakeRequest (t , req , http .StatusAccepted )
52+
53+ user4Sess := loginUser (t , "user4" )
54+ user4 := unittest .AssertExistsAndLoadBean (t , & user_model.User {Name : "user4" })
55+
56+ privateOrg := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 23 })
57+ assert .EqualValues (t , structs .VisibleTypePrivate , privateOrg .Visibility )
58+
59+ ownerTeam2 , err := org_model .OrgFromUser (privateOrg ).GetOwnerTeam (db .DefaultContext )
60+ assert .NoError (t , err )
61+ assert .NoError (t , models .AddTeamMember (db .DefaultContext , ownerTeam2 , user4 ))
62+ defer func () {
63+ models .RemoveTeamMember (db .DefaultContext , ownerTeam2 , user4 )
64+ }()
65+
66+ user4Token := getTokenForLoggedInUser (t , user4Sess ,
67+ auth_model .AccessTokenScopeWriteRepository ,
68+ auth_model .AccessTokenScopeWriteOrganization )
69+
70+ req = NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {
71+ Organization : & privateOrg .Name ,
72+ }).AddTokenAuth (user4Token )
73+ MakeRequest (t , req , http .StatusAccepted )
74+
75+ t .Run ("Anomynous" , func (t * testing.T ) {
76+ defer tests .PrintCurrentTest (t )()
77+
78+ req := NewRequest (t , "GET" , "/api/v1/repos/user2/repo1/forks" )
79+ resp := MakeRequest (t , req , http .StatusOK )
80+
81+ var forks []* api.Repository
82+ DecodeJSON (t , resp , & forks )
83+
84+ assert .Empty (t , forks )
85+ assert .EqualValues (t , "0" , resp .Header ().Get ("X-Total-Count" ))
86+ })
87+
88+ t .Run ("Logged in" , func (t * testing.T ) {
89+ defer tests .PrintCurrentTest (t )()
90+
91+ req := NewRequest (t , "GET" , "/api/v1/repos/user2/repo1/forks" ).AddTokenAuth (user1Token )
92+ resp := MakeRequest (t , req , http .StatusOK )
93+
94+ var forks []* api.Repository
95+ DecodeJSON (t , resp , & forks )
96+
97+ assert .Len (t , forks , 1 )
98+ assert .EqualValues (t , "1" , resp .Header ().Get ("X-Total-Count" ))
99+
100+ assert .NoError (t , models .AddTeamMember (db .DefaultContext , ownerTeam2 , user1 ))
101+ defer func () {
102+ models .RemoveTeamMember (db .DefaultContext , ownerTeam2 , user1 )
103+ }()
104+
105+ req = NewRequest (t , "GET" , "/api/v1/repos/user2/repo1/forks" ).AddTokenAuth (user1Token )
106+ resp = MakeRequest (t , req , http .StatusOK )
107+
108+ forks = []* api.Repository {}
109+ DecodeJSON (t , resp , & forks )
110+
111+ assert .Len (t , forks , 2 )
112+ assert .EqualValues (t , "2" , resp .Header ().Get ("X-Total-Count" ))
113+ })
114+ }
0 commit comments