@@ -7,12 +7,92 @@ 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"
1016 api "code.gitea.io/gitea/modules/structs"
1117 "code.gitea.io/gitea/tests"
18+
19+ "github.com/stretchr/testify/assert"
1220)
1321
1422func TestCreateForkNoLogin (t * testing.T ) {
1523 defer tests .PrepareTestEnv (t )()
1624 req := NewRequestWithJSON (t , "POST" , "/api/v1/repos/user2/repo1/forks" , & api.CreateForkOption {})
1725 MakeRequest (t , req , http .StatusUnauthorized )
1826}
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