2017-06-15 14:20:39 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integrations
import (
"net/http"
"path"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func testPullMerge ( t * testing . T , session * TestSession , user , repo , pullnum string ) * TestResponse {
req := NewRequest ( t , "GET" , path . Join ( user , repo , "pulls" , pullnum ) )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-06-15 14:20:39 +03:00
2017-07-07 22:36:47 +03:00
// Click the little green button to create a pull
2017-06-17 19:29:59 +03:00
htmlDoc := NewHTMLParser ( t , resp . Body )
2017-06-15 14:20:39 +03:00
link , exists := htmlDoc . doc . Find ( "form.ui.form>button.ui.green.button" ) . Parent ( ) . Attr ( "action" )
assert . True ( t , exists , "The template has changed" )
2017-06-17 07:49:45 +03:00
req = NewRequestWithValues ( t , "POST" , link , map [ string ] string {
"_csrf" : htmlDoc . GetCSRF ( ) ,
} )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusFound )
2017-06-15 14:20:39 +03:00
return resp
}
2017-06-21 04:00:03 +03:00
func testPullCleanUp ( t * testing . T , session * TestSession , user , repo , pullnum string ) * TestResponse {
req := NewRequest ( t , "GET" , path . Join ( user , repo , "pulls" , pullnum ) )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-06-21 04:00:03 +03:00
2017-07-07 22:36:47 +03:00
// Click the little green button to create a pull
2017-06-21 04:00:03 +03:00
htmlDoc := NewHTMLParser ( t , resp . Body )
link , exists := htmlDoc . doc . Find ( ".comments .merge .delete-button" ) . Attr ( "data-url" )
assert . True ( t , exists , "The template has changed" )
req = NewRequestWithValues ( t , "POST" , link , map [ string ] string {
"_csrf" : htmlDoc . GetCSRF ( ) ,
} )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2017-06-21 04:00:03 +03:00
return resp
}
2017-06-15 14:20:39 +03:00
func TestPullMerge ( t * testing . T ) {
prepareTestEnv ( t )
2017-06-17 07:49:45 +03:00
session := loginUser ( t , "user1" )
2017-10-15 18:06:07 +03:00
testRepoFork ( t , session , "user2" , "repo1" , "user1" , "repo1" )
2017-06-15 14:20:39 +03:00
testEditFile ( t , session , "user1" , "repo1" , "master" , "README.md" )
resp := testPullCreate ( t , session , "user1" , "repo1" , "master" )
2017-07-07 22:36:47 +03:00
elem := strings . Split ( RedirectURL ( t , resp ) , "/" )
2017-06-15 14:20:39 +03:00
assert . EqualValues ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] )
}
2017-06-21 04:00:03 +03:00
func TestPullCleanUpAfterMerge ( t * testing . T ) {
prepareTestEnv ( t )
session := loginUser ( t , "user1" )
2017-10-15 18:06:07 +03:00
testRepoFork ( t , session , "user2" , "repo1" , "user1" , "repo1" )
2017-06-21 04:00:03 +03:00
testEditFileToNewBranch ( t , session , "user1" , "repo1" , "master" , "feature/test" , "README.md" )
resp := testPullCreate ( t , session , "user1" , "repo1" , "feature/test" )
2017-07-07 22:36:47 +03:00
elem := strings . Split ( RedirectURL ( t , resp ) , "/" )
2017-06-21 04:00:03 +03:00
assert . EqualValues ( t , "pulls" , elem [ 3 ] )
testPullMerge ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] )
// Check PR branch deletion
resp = testPullCleanUp ( t , session , elem [ 1 ] , elem [ 2 ] , elem [ 4 ] )
respJSON := struct {
Redirect string
} { }
DecodeJSON ( t , resp , & respJSON )
assert . NotEmpty ( t , respJSON . Redirect , "Redirected URL is not found" )
elem = strings . Split ( respJSON . Redirect , "/" )
assert . EqualValues ( t , "pulls" , elem [ 3 ] )
// Check branch deletion result
req := NewRequest ( t , "GET" , respJSON . Redirect )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2017-06-21 04:00:03 +03:00
htmlDoc := NewHTMLParser ( t , resp . Body )
resultMsg := htmlDoc . doc . Find ( ".ui.message>p" ) . Text ( )
assert . EqualValues ( t , "user1/feature/test has been deleted." , resultMsg )
}