@@ -12,6 +12,7 @@ import (
1212 "strings"
1313 "testing"
1414
15+ auth_model "code.gitea.io/gitea/models/auth"
1516 "code.gitea.io/gitea/modules/git"
1617 "code.gitea.io/gitea/modules/test"
1718 "code.gitea.io/gitea/tests"
@@ -83,6 +84,30 @@ func testPullCreateDirectly(t *testing.T, session *TestSession, baseRepoOwner, b
8384 return resp
8485}
8586
87+ func testPullCreateFailure (t * testing.T , session * TestSession , baseRepoOwner , baseRepoName , baseBranch , headRepoOwner , headRepoName , headBranch , title string ) * httptest.ResponseRecorder {
88+ headCompare := headBranch
89+ if headRepoOwner != "" {
90+ if headRepoName != "" {
91+ headCompare = fmt .Sprintf ("%s/%s:%s" , headRepoOwner , headRepoName , headBranch )
92+ } else {
93+ headCompare = fmt .Sprintf ("%s:%s" , headRepoOwner , headBranch )
94+ }
95+ }
96+ req := NewRequest (t , "GET" , fmt .Sprintf ("/%s/%s/compare/%s...%s" , baseRepoOwner , baseRepoName , baseBranch , headCompare ))
97+ resp := session .MakeRequest (t , req , http .StatusOK )
98+
99+ // Submit the form for creating the pull
100+ htmlDoc := NewHTMLParser (t , resp .Body )
101+ link , exists := htmlDoc .doc .Find ("form.ui.form" ).Attr ("action" )
102+ assert .True (t , exists , "The template has changed" )
103+ req = NewRequestWithValues (t , "POST" , link , map [string ]string {
104+ "_csrf" : htmlDoc .GetCSRF (),
105+ "title" : title ,
106+ })
107+ resp = session .MakeRequest (t , req , http .StatusBadRequest )
108+ return resp
109+ }
110+
86111func TestPullCreate (t * testing.T ) {
87112 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
88113 session := loginUser (t , "user1" )
@@ -245,3 +270,46 @@ func TestCreateAgitPullWithReadPermission(t *testing.T) {
245270 })
246271 })
247272}
273+
274+ /*
275+ Setup: user2 has repository, user1 forks it
276+ ---
277+
278+ 1. User2 blocks User1
279+ 2. User1 adds changes to fork
280+ 3. User1 attempts to create a pull request
281+ 4. User1 sees alert that the action is not allowed because of the block
282+ */
283+ func TestCreatePullWhenBlocked (t * testing.T ) {
284+ RepoOwner := "user2"
285+ ForkOwner := "user16"
286+ onGiteaRun (t , func (t * testing.T , u * url.URL ) {
287+ // Setup
288+ // User1 forks repo1 from User2
289+ sessionFork := loginUser (t , ForkOwner )
290+ testRepoFork (t , sessionFork , RepoOwner , "repo1" , ForkOwner , "forkrepo1" , "" )
291+
292+ // 1. User2 blocks user1
293+ // sessionBase := loginUser(t, "user2")
294+ token := getUserToken (t , RepoOwner , auth_model .AccessTokenScopeWriteUser )
295+
296+ req := NewRequest (t , "GET" , fmt .Sprintf ("/api/v1/user/blocks/%s" , ForkOwner )).
297+ AddTokenAuth (token )
298+ MakeRequest (t , req , http .StatusNotFound )
299+ req = NewRequest (t , "PUT" , fmt .Sprintf ("/api/v1/user/blocks/%s" , ForkOwner )).
300+ AddTokenAuth (token )
301+ MakeRequest (t , req , http .StatusNoContent )
302+
303+ // 2. User1 adds changes to fork
304+ testEditFile (t , sessionFork , ForkOwner , "forkrepo1" , "master" , "README.md" , "Hello, World (Edited)\n " )
305+
306+ // 3. User1 attempts to create a pull request
307+ testPullCreateFailure (t , sessionFork , RepoOwner , "repo1" , "master" , ForkOwner , "forkrepo1" , "master" , "This is a pull title" )
308+
309+ // Teardown
310+ // Unblock user
311+ req = NewRequest (t , "DELETE" , fmt .Sprintf ("/api/v1/user/blocks/%s" , ForkOwner )).
312+ AddTokenAuth (token )
313+ MakeRequest (t , req , http .StatusNoContent )
314+ })
315+ }
0 commit comments