@ -43,7 +43,13 @@ import (
"github.com/stretchr/testify/assert"
)
func testPullMerge ( t * testing . T , session * TestSession , user , repo , pullnum string , mergeStyle repo_model . MergeStyle , deleteBranch bool ) * httptest . ResponseRecorder {
type MergeOptions struct {
Style repo_model . MergeStyle
HeadCommitID string
DeleteBranch bool
}
func testPullMerge ( t * testing . T , session * TestSession , user , repo , pullnum string , mergeOptions MergeOptions ) * httptest . ResponseRecorder {
req := NewRequest ( t , "GET" , path . Join ( user , repo , "pulls" , pullnum ) )
resp := session . MakeRequest ( t , req , http . StatusOK )
@ -51,11 +57,12 @@ func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum strin
link := path . Join ( user , repo , "pulls" , pullnum , "merge" )
options := map [ string ] string {
"_csrf" : htmlDoc . GetCSRF ( ) ,
"do" : string ( mergeStyle ) ,
"_csrf" : htmlDoc . GetCSRF ( ) ,
"do" : string ( mergeOptions . Style ) ,
"head_commit_id" : mergeOptions . HeadCommitID ,
}
if d eleteBranch {
if mergeOptions. D eleteBranch {
options [ "delete_branch_after_merge" ] = "on"
}
@ -69,6 +76,14 @@ func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum strin
assert . Equal ( t , fmt . Sprintf ( "/%s/%s/pulls/%s" , user , repo , pullnum ) , respJSON . Redirect )
pullnumInt , err := strconv . ParseInt ( pullnum , 10 , 64 )
assert . NoError ( t , err )
repository , err := repo_model . GetRepositoryByOwnerAndName ( t . Context ( ) , user , repo )
assert . NoError ( t , err )
pull , err := issues_model . GetPullRequestByIndex ( t . Context ( ) , repository . ID , pullnumInt )
assert . NoError ( t , err )
assert . True ( t , pull . HasMerged )
return resp
}
@ -102,7 +117,10 @@ func TestPullMerge(t *testing.T) {
elem := strings . Split ( test . RedirectURL ( resp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , repo_model . MergeStyleMerge , false )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleMerge ,
DeleteBranch : false ,
} )
hookTasks , err = webhook . HookTasks ( t . Context ( ) , 1 , 1 )
assert . NoError ( t , err )
@ -124,7 +142,10 @@ func TestPullRebase(t *testing.T) {
elem := strings . Split ( test . RedirectURL ( resp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , repo_model . MergeStyleRebase , false )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleRebase ,
DeleteBranch : false ,
} )
hookTasks , err = webhook . HookTasks ( t . Context ( ) , 1 , 1 )
assert . NoError ( t , err )
@ -146,7 +167,10 @@ func TestPullRebaseMerge(t *testing.T) {
elem := strings . Split ( test . RedirectURL ( resp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , repo_model . MergeStyleRebaseMerge , false )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleRebaseMerge ,
DeleteBranch : false ,
} )
hookTasks , err = webhook . HookTasks ( t . Context ( ) , 1 , 1 )
assert . NoError ( t , err )
@ -169,7 +193,42 @@ func TestPullSquash(t *testing.T) {
elem := strings . Split ( test . RedirectURL ( resp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , repo_model . MergeStyleSquash , false )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleSquash ,
DeleteBranch : false ,
} )
hookTasks , err = webhook . HookTasks ( t . Context ( ) , 1 , 1 )
assert . NoError ( t , err )
assert . Len ( t , hookTasks , hookTasksLenBefore + 1 )
} )
}
func TestPullSquashWithHeadCommitID ( t * testing . T ) {
onGiteaRun ( t , func ( t * testing . T , giteaURL * url . URL ) {
hookTasks , err := webhook . HookTasks ( t . Context ( ) , 1 , 1 ) // Retrieve previous hook number
assert . NoError ( t , err )
hookTasksLenBefore := len ( hookTasks )
session := loginUser ( t , "user1" )
testRepoFork ( t , session , "user2" , "repo1" , "user1" , "repo1" , "" )
testEditFile ( t , session , "user1" , "repo1" , "master" , "README.md" , "Hello, World (Edited)\n" )
testEditFile ( t , session , "user1" , "repo1" , "master" , "README.md" , "Hello, World (Edited!)\n" )
resp := testPullCreate ( t , session , "user1" , "repo1" , false , "master" , "master" , "This is a pull title" )
repo1 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerName : "user1" , Name : "repo1" } )
headBranch , err := git_model . GetBranch ( t . Context ( ) , repo1 . ID , "master" )
assert . NoError ( t , err )
assert . NotNil ( t , headBranch )
elem := strings . Split ( test . RedirectURL ( resp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleSquash ,
DeleteBranch : false ,
HeadCommitID : headBranch . CommitID ,
} )
hookTasks , err = webhook . HookTasks ( t . Context ( ) , 1 , 1 )
assert . NoError ( t , err )
@ -187,7 +246,10 @@ func TestPullCleanUpAfterMerge(t *testing.T) {
elem := strings . Split ( test . RedirectURL ( resp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , repo_model . MergeStyleMerge , false )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleMerge ,
DeleteBranch : false ,
} )
// Check PR branch deletion
resp = testPullCleanUp ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] )
@ -556,7 +618,10 @@ func TestPullRetargetChildOnBranchDelete(t *testing.T) {
elemChildPR := strings . Split ( test . RedirectURL ( respChildPR ) , "/" )
assert . Equal ( t , "pulls" , elemChildPR [ 3 ] )
testPullMerge ( t , session , elemBasePR [ 1 ] , elemBasePR [ 2 ] , elemBasePR [ 4 ] , repo_model . MergeStyleMerge , true )
testPullMerge ( t , session , elemBasePR [ 1 ] , elemBasePR [ 2 ] , elemBasePR [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleMerge ,
DeleteBranch : true ,
} )
repo1 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerName : "user2" , Name : "repo1" } )
branchBasePR := unittest . AssertExistsAndLoadBean ( t , & git_model . Branch { RepoID : repo1 . ID , Name : "base-pr" } )
@ -592,7 +657,10 @@ func TestPullDontRetargetChildOnWrongRepo(t *testing.T) {
defer test . MockVariableValue ( & setting . Repository . PullRequest . RetargetChildrenOnMerge , false ) ( )
testPullMerge ( t , session , elemBasePR [ 1 ] , elemBasePR [ 2 ] , elemBasePR [ 4 ] , repo_model . MergeStyleMerge , true )
testPullMerge ( t , session , elemBasePR [ 1 ] , elemBasePR [ 2 ] , elemBasePR [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleMerge ,
DeleteBranch : true ,
} )
repo1 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerName : "user1" , Name : "repo1" } )
branchBasePR := unittest . AssertExistsAndLoadBean ( t , & git_model . Branch { RepoID : repo1 . ID , Name : "base-pr" } )
@ -624,7 +692,10 @@ func TestPullRequestMergedWithNoPermissionDeleteBranch(t *testing.T) {
// user2 has no permission to delete branch of repo user1/repo1
session2 := loginUser ( t , "user2" )
testPullMerge ( t , session2 , elemBasePR [ 1 ] , elemBasePR [ 2 ] , elemBasePR [ 4 ] , repo_model . MergeStyleMerge , true )
testPullMerge ( t , session2 , elemBasePR [ 1 ] , elemBasePR [ 2 ] , elemBasePR [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleMerge ,
DeleteBranch : true ,
} )
repo1 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerName : "user4" , Name : "repo1" } )
branchBasePR := unittest . AssertExistsAndLoadBean ( t , & git_model . Branch { RepoID : repo1 . ID , Name : "base-pr" } )
@ -672,7 +743,10 @@ func TestPullMergeIndexerNotifier(t *testing.T) {
// merge the pull request
elem := strings . Split ( test . RedirectURL ( createPullResp ) , "/" )
assert . Equal ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , repo_model . MergeStyleMerge , false )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] , MergeOptions {
Style : repo_model . MergeStyleMerge ,
DeleteBranch : false ,
} )
// check if the issue is closed
issue = unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue {