@@ -31,19 +31,24 @@ import (
3131func TestCreateFile (t * testing.T ) {
3232 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
3333 session := loginUser (t , "user2" )
34- testCreateFile (t , session , "user2" , "user2" , "repo1" , "master" , "master" , "direct" , "test.txt" , "Content" )
34+ testCreateFile (t , session , "user2" , "user2" , "repo1" , "master" , "master" , "direct" , "test.txt" , "Content" , "" )
35+ testCreateFile (
36+ t , session , "user2" , "user2" , "repo1" , "master" , "master" , "direct" , "test.txt" , "Content" ,
37+ `A file named "test.txt" already exists in this repository.` )
38+ testCreateFile (t , session , "user2" , "user2" , "repo1" , "master" , "master" , "commit-to-new-branch" , "test2.txt" , "Content" ,
39+ `Branch "master" already exists in this repository.` )
3540 })
3641}
3742
3843func TestCreateFileFork (t * testing.T ) {
3944 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
4045 session := loginUser (t , "user4" )
4146 forkToEdit (t , session , "user2" , "repo1" , "_new" , "master" , "test.txt" )
42- testCreateFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/test" , "commit-to-new-branch" , "test.txt" , "Content" )
47+ testCreateFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/test" , "commit-to-new-branch" , "test.txt" , "Content" , "" )
4348 })
4449}
4550
46- func testCreateFile (t * testing.T , session * TestSession , user , owner , repo , branch , targetBranch , commitChoice , filePath , content string ) {
51+ func testCreateFile (t * testing.T , session * TestSession , user , owner , repo , branch , targetBranch , commitChoice , filePath , content , expectedError string ) {
4752 // Request editor page
4853 newURL := fmt .Sprintf ("/%s/%s/_new/%s/" , owner , repo , branch )
4954 req := NewRequest (t , "GET" , newURL )
@@ -62,6 +67,16 @@ func testCreateFile(t *testing.T, session *TestSession, user, owner, repo, branc
6267 "commit_choice" : commitChoice ,
6368 "new_branch_name" : targetBranch ,
6469 })
70+
71+ if expectedError != "" {
72+ resp := session .MakeRequest (t , req , http .StatusOK )
73+
74+ // Check for expextecd error message
75+ htmlDoc := NewHTMLParser (t , resp .Body )
76+ assert .Contains (t , htmlDoc .doc .Find (".ui.flash-message" ).Text (), expectedError )
77+ return
78+ }
79+
6580 session .MakeRequest (t , req , http .StatusSeeOther )
6681
6782 // Check new file exists
@@ -222,40 +237,56 @@ func TestEditFileToNewBranchFork(t *testing.T) {
222237func TestDeleteFile (t * testing.T ) {
223238 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
224239 session := loginUser (t , "user2" )
225- testDeleteFile (t , session , "user2" , "user2" , "repo1" , "master" , "master" , "direct" , "README.md" )
240+ testDeleteFile (t , session , "user2" , "user2" , "repo1" , "master" , "master" , "direct" , "README.md" , "" )
241+ testDeleteFile (t , session , "user2" , "user2" , "repo1" , "master" , "master" , "direct" , "MISSING.md" ,
242+ `The file being deleted, "MISSING.md", no longer exists in this repository.` )
226243 })
227244}
228245
229246func TestDeleteFileFork (t * testing.T ) {
230247 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
231248 session := loginUser (t , "user4" )
232249 forkToEdit (t , session , "user2" , "repo1" , "_delete" , "master" , "README.md" )
233- testDeleteFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/test" , "commit-to-new-branch" , "README.md" )
250+ testDeleteFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/test" , "commit-to-new-branch" , "README.md" , "" )
251+ testDeleteFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/missing" , "commit-to-new-branch" , "MISSING.md" ,
252+ `The file being deleted, "MISSING.md", no longer exists in this repository.` )
234253 })
235254}
236255
237- func testDeleteFile (t * testing.T , session * TestSession , user , owner , repo , branch , targetBranch , commitChoice , filePath string ) {
238- // Check file exists
239- req := NewRequestf (t , "GET" , "/%s/%s/src/branch/%s/%s" , owner , repo , branch , filePath )
240- session .MakeRequest (t , req , http .StatusOK )
256+ func testDeleteFile (t * testing.T , session * TestSession , user , owner , repo , branch , targetBranch , commitChoice , filePath , expectedError string ) {
257+ if expectedError == "" {
258+ // Check file exists
259+ req := NewRequestf (t , "GET" , "/%s/%s/src/branch/%s/%s" , owner , repo , branch , filePath )
260+ session .MakeRequest (t , req , http .StatusOK )
261+ }
241262
242263 // Request editor page
243264 newURL := fmt .Sprintf ("/%s/%s/_delete/%s/%s" , owner , repo , branch , filePath )
244- req = NewRequest (t , "GET" , newURL )
265+ req : = NewRequest (t , "GET" , newURL )
245266 resp := session .MakeRequest (t , req , http .StatusOK )
246267
247268 doc := NewHTMLParser (t , resp .Body )
248269 lastCommit := doc .GetInputValueByName ("last_commit" )
249270 assert .NotEmpty (t , lastCommit )
250271
251- // Save new file to master branch
272+ // Save deleted file to target branch
252273 req = NewRequestWithValues (t , "POST" , newURL , map [string ]string {
253274 "_csrf" : doc .GetCSRF (),
254275 "last_commit" : lastCommit ,
255276 "tree_path" : filePath ,
256277 "commit_choice" : commitChoice ,
257278 "new_branch_name" : targetBranch ,
258279 })
280+
281+ if expectedError != "" {
282+ resp := session .MakeRequest (t , req , http .StatusOK )
283+
284+ // Check for expextecd error message
285+ htmlDoc := NewHTMLParser (t , resp .Body )
286+ assert .Contains (t , htmlDoc .doc .Find (".ui.flash-message" ).Text (), expectedError )
287+ return
288+ }
289+
259290 session .MakeRequest (t , req , http .StatusSeeOther )
260291
261292 // Check file was deleted
@@ -266,19 +297,23 @@ func testDeleteFile(t *testing.T, session *TestSession, user, owner, repo, branc
266297func TestPatchFile (t * testing.T ) {
267298 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
268299 session := loginUser (t , "user2" )
269- testPatchFile (t , session , "user2" , "user2" , "repo1" , "master" , "feature/test" )
300+ testPatchFile (t , session , "user2" , "user2" , "repo1" , "master" , "feature/test" , "Contents" , "" )
301+ testPatchFile (t , session , "user2" , "user2" , "repo1" , "master" , "feature/test" , "Contents" ,
302+ `Branch "feature/test" already exists in this repository.` )
303+ testPatchFile (t , session , "user2" , "user2" , "repo1" , "feature/test" , "feature/again" , "Conflict" ,
304+ `Unable to apply patch` )
270305 })
271306}
272307
273308func TestPatchFileFork (t * testing.T ) {
274309 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
275310 session := loginUser (t , "user4" )
276311 forkToEdit (t , session , "user2" , "repo1" , "_diffpatch" , "master" , "README.md" )
277- testPatchFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/test" )
312+ testPatchFile (t , session , "user4" , "user2" , "repo1" , "master" , "feature/test" , "Contents" , "" )
278313 })
279314}
280315
281- func testPatchFile (t * testing.T , session * TestSession , user , owner , repo , branch , targetBranch string ) {
316+ func testPatchFile (t * testing.T , session * TestSession , user , owner , repo , branch , targetBranch , contents , expectedError string ) {
282317 // Request editor page
283318 newURL := fmt .Sprintf ("/%s/%s/_diffpatch/%s/" , owner , repo , branch )
284319 req := NewRequest (t , "GET" , newURL )
@@ -293,17 +328,27 @@ func testPatchFile(t *testing.T, session *TestSession, user, owner, repo, branch
293328 "_csrf" : doc .GetCSRF (),
294329 "last_commit" : lastCommit ,
295330 "tree_path" : "__dummy__" ,
296- "content" : `diff --git a/patch-file-1.txt b/patch-file-1.txt
331+ "content" : fmt . Sprintf ( `diff --git a/patch-file-1.txt b/patch-file-1.txt
297332new file mode 100644
298333index 0000000000..aaaaaaaaaa
299334--- /dev/null
300335+++ b/patch-file-1.txt
301336@@ -0,0 +1 @@
302- +File 1
303- ` ,
337+ +%s
338+ ` , contents ),
304339 "commit_choice" : "commit-to-new-branch" ,
305340 "new_branch_name" : targetBranch ,
306341 })
342+
343+ if expectedError != "" {
344+ resp := session .MakeRequest (t , req , http .StatusOK )
345+
346+ // Check for expextecd error message
347+ htmlDoc := NewHTMLParser (t , resp .Body )
348+ assert .Contains (t , htmlDoc .doc .Find (".ui.flash-message" ).Text (), expectedError )
349+ return
350+ }
351+
307352 session .MakeRequest (t , req , http .StatusSeeOther )
308353
309354 // Check new file exists
@@ -482,7 +527,7 @@ func forkToEdit(t *testing.T, session *TestSession, owner, repo, operation, bran
482527 assert .Equal (t , "/" + path .Join (owner , repo , operation , branch , filePath ), test .RedirectURL (resp ))
483528}
484529
485- func testForkToEdit (t * testing.T , session * TestSession , user , owner , repo , branch , filePath string ) {
530+ func testForkToEditFile (t * testing.T , session * TestSession , user , owner , repo , branch , filePath string ) {
486531 // Fork repository because we can't edit it
487532 forkToEdit (t , session , owner , repo , "_edit" , branch , filePath )
488533
@@ -524,9 +569,34 @@ func testForkToEdit(t *testing.T, session *TestSession, user, owner, repo, branc
524569 session .MakeRequest (t , req , http .StatusOK )
525570}
526571
527- func TestForkToEdit (t * testing.T ) {
572+ func TestForkToEditFile (t * testing.T ) {
573+ onGiteaRun (t , func (t * testing.T , u * url.URL ) {
574+ session := loginUser (t , "user4" )
575+ testForkToEditFile (t , session , "user4" , "user2" , "repo1" , "master" , "README.md" )
576+ })
577+ }
578+
579+ func TestEditFileNotAllowed (t * testing.T ) {
528580 onGiteaRun (t , func (t * testing.T , u * url.URL ) {
529581 session := loginUser (t , "user4" )
530- testForkToEdit (t , session , "user4" , "user2" , "repo1" , "master" , "README.md" )
582+
583+ operations := []string {"_new" , "_edit" , "_delete" , "_upload" , "_diffpatch" , "_cherrypick" }
584+
585+ for _ , operation := range operations {
586+ // Branch does not exist
587+ url := path .Join ("user2" , "repo1" , operation , "missing" , "README.md" )
588+ req := NewRequest (t , "GET" , url )
589+ session .MakeRequest (t , req , http .StatusNotFound )
590+
591+ // Private repository
592+ url = path .Join ("user2" , "repo2" , operation , "master" , "Home.md" )
593+ req = NewRequest (t , "GET" , url )
594+ session .MakeRequest (t , req , http .StatusNotFound )
595+
596+ // Empty repository
597+ url = path .Join ("org41" , "repo61" , operation , "master" , "README.md" )
598+ req = NewRequest (t , "GET" , url )
599+ session .MakeRequest (t , req , http .StatusNotFound )
600+ }
531601 })
532602}
0 commit comments