@ -12,6 +12,7 @@ import (
auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/db"
issues_model "code.gitea.io/gitea/models/issues"
"code.gitea.io/gitea/models/perm"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
@ -126,6 +127,65 @@ func TestAPICreatePullSuccess(t *testing.T) {
MakeRequest ( t , req , http . StatusUnprocessableEntity ) // second request should fail
}
func TestAPICreatePullBasePermission ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo10 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 10 } )
// repo10 have code, pulls units.
repo11 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 11 } )
// repo11 only have code unit but should still create pulls
owner10 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo10 . OwnerID } )
user4 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 4 } )
session := loginUser ( t , user4 . Name )
token := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeWriteRepository )
opts := & api . CreatePullRequestOption {
Head : fmt . Sprintf ( "%s:master" , repo11 . OwnerName ) ,
Base : "master" ,
Title : "create a failure pr" ,
}
req := NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls" , owner10 . Name , repo10 . Name ) , & opts ) . AddTokenAuth ( token )
MakeRequest ( t , req , http . StatusForbidden )
// add user4 to be a collaborator to base repo
ctx := NewAPITestContext ( t , repo10 . OwnerName , repo10 . Name , auth_model . AccessTokenScopeWriteRepository )
t . Run ( "AddUser4AsCollaborator" , doAPIAddCollaborator ( ctx , user4 . Name , perm . AccessModeRead ) )
// create again
req = NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls" , owner10 . Name , repo10 . Name ) , & opts ) . AddTokenAuth ( token )
MakeRequest ( t , req , http . StatusCreated )
}
func TestAPICreatePullHeadPermission ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo10 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 10 } )
// repo10 have code, pulls units.
repo11 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 11 } )
// repo11 only have code unit but should still create pulls
owner10 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo10 . OwnerID } )
user4 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 4 } )
session := loginUser ( t , user4 . Name )
token := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeWriteRepository )
opts := & api . CreatePullRequestOption {
Head : fmt . Sprintf ( "%s:master" , repo11 . OwnerName ) ,
Base : "master" ,
Title : "create a failure pr" ,
}
req := NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls" , owner10 . Name , repo10 . Name ) , & opts ) . AddTokenAuth ( token )
MakeRequest ( t , req , http . StatusForbidden )
// add user4 to be a collaborator to head repo with read permission
ctx := NewAPITestContext ( t , repo11 . OwnerName , repo11 . Name , auth_model . AccessTokenScopeWriteRepository )
t . Run ( "AddUser4AsCollaboratorWithRead" , doAPIAddCollaborator ( ctx , user4 . Name , perm . AccessModeRead ) )
req = NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls" , owner10 . Name , repo10 . Name ) , & opts ) . AddTokenAuth ( token )
MakeRequest ( t , req , http . StatusForbidden )
// add user4 to be a collaborator to head repo with write permission
t . Run ( "AddUser4AsCollaboratorWithWrite" , doAPIAddCollaborator ( ctx , user4 . Name , perm . AccessModeWrite ) )
req = NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls" , owner10 . Name , repo10 . Name ) , & opts ) . AddTokenAuth ( token )
MakeRequest ( t , req , http . StatusCreated )
}
func TestAPICreatePullSameRepoSuccess ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } )