2017-06-15 10:01:51 +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"
2017-12-04 01:46:01 +03:00
"net/http/httptest"
2017-06-15 10:01:51 +03:00
"path"
2017-06-21 04:00:03 +03:00
"strings"
2017-06-15 10:01:51 +03:00
"testing"
"github.com/stretchr/testify/assert"
)
2017-12-04 01:46:01 +03:00
func testPullCreate ( t * testing . T , session * TestSession , user , repo , branch string ) * httptest . ResponseRecorder {
2017-06-15 10:01:51 +03:00
req := NewRequest ( t , "GET" , path . Join ( user , repo ) )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-06-15 10:01:51 +03:00
2017-06-15 12:38:54 +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-08-14 01:49:38 +03:00
link , exists := htmlDoc . doc . Find ( "button.ui.green.tiny.compact.button" ) . Parent ( ) . Attr ( "href" )
2017-06-15 10:01:51 +03:00
assert . True ( t , exists , "The template has changed" )
2017-06-21 04:00:03 +03:00
if branch != "master" {
link = strings . Replace ( link , ":master" , ":" + branch , 1 )
}
2017-06-15 10:01:51 +03:00
req = NewRequest ( t , "GET" , link )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2017-06-15 10:01:51 +03:00
// Submit the form for creating the pull
2017-06-17 19:29:59 +03:00
htmlDoc = NewHTMLParser ( t , resp . Body )
2017-06-15 10:01:51 +03:00
link , exists = htmlDoc . doc . Find ( "form.ui.form" ) . 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 ( ) ,
"title" : "This is a pull title" ,
} )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusFound )
2017-06-15 10:01:51 +03:00
2017-06-15 14:20:39 +03:00
return resp
2017-06-15 10:01:51 +03:00
}
func TestPullCreate ( 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-10-16 00:54:53 +03:00
testEditFile ( t , session , "user1" , "repo1" , "master" , "README.md" , "Hello, World (Edited)\n" )
2018-01-05 13:56:52 +03:00
resp := testPullCreate ( t , session , "user1" , "repo1" , "master" )
// check the redirected URL
url := resp . HeaderMap . Get ( "Location" )
assert . Regexp ( t , "^/user2/repo1/pulls/[0-9]*$" , url )
// check .diff can be accessed and matches performed change
req := NewRequest ( t , "GET" , url + ".diff" )
resp = session . MakeRequest ( t , req , http . StatusOK )
assert . Regexp ( t , "\\+Hello, World \\(Edited\\)" , resp . Body )
assert . Regexp ( t , "^diff" , resp . Body )
assert . NotRegexp ( t , "diff.*diff" , resp . Body ) // not two diffs, just one
2017-06-15 10:01:51 +03:00
}