@@ -60,26 +60,50 @@ func testPullCreate(t *testing.T, session *TestSession, user, repo string, toSel
6060	return  resp 
6161}
6262
63- func  testPullCreateDirectly (t  * testing.T , session  * TestSession , baseRepoOwner , baseRepoName , baseBranch , headRepoOwner , headRepoName , headBranch , title  string ) * httptest.ResponseRecorder  {
64- 	headCompare  :=  headBranch 
65- 	if  headRepoOwner  !=  ""  {
66- 		if  headRepoName  !=  ""  {
67- 			headCompare  =  fmt .Sprintf ("%s/%s:%s" , headRepoOwner , headRepoName , headBranch )
63+ type  createPullRequestOptions  struct  {
64+ 	BaseRepoOwner  string 
65+ 	BaseRepoName   string 
66+ 	BaseBranch     string 
67+ 	HeadRepoOwner  string 
68+ 	HeadRepoName   string 
69+ 	HeadBranch     string 
70+ 	Title          string 
71+ 	ReviewerIDs    string  // comma-separated list of user IDs 
72+ }
73+ 
74+ func  (opts  createPullRequestOptions ) IsValid () bool  {
75+ 	return  opts .BaseRepoOwner  !=  ""  &&  opts .BaseRepoName  !=  ""  &&  opts .BaseBranch  !=  ""  && 
76+ 		opts .HeadBranch  !=  ""  &&  opts .Title  !=  "" 
77+ }
78+ 
79+ func  testPullCreateDirectly (t  * testing.T , session  * TestSession , opts  createPullRequestOptions ) * httptest.ResponseRecorder  {
80+ 	if  ! opts .IsValid () {
81+ 		t .Fatal ("Invalid pull request options" )
82+ 	}
83+ 
84+ 	headCompare  :=  opts .HeadBranch 
85+ 	if  opts .HeadRepoOwner  !=  ""  {
86+ 		if  opts .HeadRepoName  !=  ""  {
87+ 			headCompare  =  fmt .Sprintf ("%s/%s:%s" , opts .HeadRepoOwner , opts .HeadRepoName , opts .HeadBranch )
6888		} else  {
69- 			headCompare  =  fmt .Sprintf ("%s:%s" , headRepoOwner ,  headBranch )
89+ 			headCompare  =  fmt .Sprintf ("%s:%s" , opts . HeadRepoOwner ,  opts . HeadBranch )
7090		}
7191	}
72- 	req  :=  NewRequest (t , "GET" , fmt .Sprintf ("/%s/%s/compare/%s...%s" , baseRepoOwner ,  baseRepoName ,  baseBranch , headCompare ))
92+ 	req  :=  NewRequest (t , "GET" , fmt .Sprintf ("/%s/%s/compare/%s...%s" , opts . BaseRepoOwner ,  opts . BaseRepoName ,  opts . BaseBranch , headCompare ))
7393	resp  :=  session .MakeRequest (t , req , http .StatusOK )
7494
7595	// Submit the form for creating the pull 
7696	htmlDoc  :=  NewHTMLParser (t , resp .Body )
7797	link , exists  :=  htmlDoc .doc .Find ("form.ui.form" ).Attr ("action" )
7898	assert .True (t , exists , "The template has changed" )
79- 	req   =   NewRequestWithValues ( t ,  "POST" ,  link ,  map [string ]string {
99+ 	params   :=  map [string ]string {
80100		"_csrf" : htmlDoc .GetCSRF (),
81- 		"title" : title ,
82- 	})
101+ 		"title" : opts .Title ,
102+ 	}
103+ 	if  opts .ReviewerIDs  !=  ""  {
104+ 		params ["reviewer_ids" ] =  opts .ReviewerIDs 
105+ 	}
106+ 	req  =  NewRequestWithValues (t , "POST" , link , params )
83107	resp  =  session .MakeRequest (t , req , http .StatusOK )
84108	return  resp 
85109}
@@ -246,7 +270,15 @@ func TestPullCreatePrFromBaseToFork(t *testing.T) {
246270		testEditFile (t , sessionBase , "user2" , "repo1" , "master" , "README.md" , "Hello, World (Edited)\n " )
247271
248272		// Create a PR 
249- 		resp  :=  testPullCreateDirectly (t , sessionFork , "user1" , "repo1" , "master" , "user2" , "repo1" , "master" , "This is a pull title" )
273+ 		resp  :=  testPullCreateDirectly (t , sessionFork , createPullRequestOptions {
274+ 			BaseRepoOwner : "user1" ,
275+ 			BaseRepoName :  "repo1" ,
276+ 			BaseBranch :    "master" ,
277+ 			HeadRepoOwner : "user2" ,
278+ 			HeadRepoName :  "repo1" ,
279+ 			HeadBranch :    "master" ,
280+ 			Title :         "This is a pull title" ,
281+ 		})
250282		// check the redirected URL 
251283		url  :=  test .RedirectURL (resp )
252284		assert .Regexp (t , "^/user1/repo1/pulls/[0-9]*$" , url )
0 commit comments