2017-05-02 03:49:55 +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"
2019-05-11 18:29:17 +03:00
"net/url"
2017-06-08 14:15:41 +03:00
"path"
2017-05-02 03:49:55 +03:00
"testing"
"github.com/stretchr/testify/assert"
)
func TestCreateFile ( t * testing . T ) {
2019-05-11 18:29:17 +03:00
onGiteaRun ( t , func ( t * testing . T , u * url . URL ) {
session := loginUser ( t , "user2" )
2017-05-02 03:49:55 +03:00
2019-05-11 18:29:17 +03:00
// Request editor page
req := NewRequest ( t , "GET" , "/user2/repo1/_new/master/" )
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-05-02 03:49:55 +03:00
2019-05-11 18:29:17 +03:00
doc := NewHTMLParser ( t , resp . Body )
lastCommit := doc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
2017-05-02 03:49:55 +03:00
2019-05-11 18:29:17 +03:00
// Save new file to master branch
req = NewRequestWithValues ( t , "POST" , "/user2/repo1/_new/master/" , map [ string ] string {
"_csrf" : doc . GetCSRF ( ) ,
"last_commit" : lastCommit ,
"tree_path" : "test.txt" ,
"content" : "Content" ,
"commit_choice" : "direct" ,
} )
2019-06-12 22:41:28 +03:00
session . MakeRequest ( t , req , http . StatusFound )
2017-06-17 07:49:45 +03:00
} )
2017-05-02 03:49:55 +03:00
}
func TestCreateFileOnProtectedBranch ( t * testing . T ) {
2019-05-11 18:29:17 +03:00
onGiteaRun ( t , func ( t * testing . T , u * url . URL ) {
session := loginUser ( t , "user2" )
csrf := GetCSRF ( t , session , "/user2/repo1/settings/branches" )
// Change master branch to protected
req := NewRequestWithValues ( t , "POST" , "/user2/repo1/settings/branches/master" , map [ string ] string {
"_csrf" : csrf ,
"protected" : "on" ,
} )
2019-06-12 22:41:28 +03:00
session . MakeRequest ( t , req , http . StatusFound )
2019-05-11 18:29:17 +03:00
// Check if master branch has been locked successfully
flashCookie := session . GetCookie ( "macaron_flash" )
assert . NotNil ( t , flashCookie )
assert . EqualValues ( t , "success%3DBranch%2Bprotection%2Bfor%2Bbranch%2B%2527master%2527%2Bhas%2Bbeen%2Bupdated." , flashCookie . Value )
// Request editor page
req = NewRequest ( t , "GET" , "/user2/repo1/_new/master/" )
2019-06-12 22:41:28 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2019-05-11 18:29:17 +03:00
doc := NewHTMLParser ( t , resp . Body )
lastCommit := doc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
// Save new file to master branch
req = NewRequestWithValues ( t , "POST" , "/user2/repo1/_new/master/" , map [ string ] string {
"_csrf" : doc . GetCSRF ( ) ,
"last_commit" : lastCommit ,
"tree_path" : "test.txt" ,
"content" : "Content" ,
"commit_choice" : "direct" ,
} )
resp = session . MakeRequest ( t , req , http . StatusOK )
// Check body for error message
assert . Contains ( t , resp . Body . String ( ) , "Cannot commit to protected branch 'master'." )
// remove the protected branch
csrf = GetCSRF ( t , session , "/user2/repo1/settings/branches" )
// Change master branch to protected
req = NewRequestWithValues ( t , "POST" , "/user2/repo1/settings/branches/master" , map [ string ] string {
"_csrf" : csrf ,
"protected" : "off" ,
} )
resp = session . MakeRequest ( t , req , http . StatusFound )
// Check if master branch has been locked successfully
flashCookie = session . GetCookie ( "macaron_flash" )
assert . NotNil ( t , flashCookie )
assert . EqualValues ( t , "success%3DBranch%2Bprotection%2Bfor%2Bbranch%2B%2527master%2527%2Bhas%2Bbeen%2Bdisabled." , flashCookie . Value )
2017-09-14 11:16:22 +03:00
} )
2017-05-02 03:49:55 +03:00
}
2017-06-08 14:15:41 +03:00
2017-12-04 01:46:01 +03:00
func testEditFile ( t * testing . T , session * TestSession , user , repo , branch , filePath , newContent string ) * httptest . ResponseRecorder {
2017-06-08 14:15:41 +03:00
// Get to the 'edit this file' page
2017-06-10 03:41:36 +03:00
req := NewRequest ( t , "GET" , path . Join ( user , repo , "_edit" , branch , filePath ) )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-06-08 14:15:41 +03:00
2017-06-17 19:29:59 +03:00
htmlDoc := NewHTMLParser ( t , resp . Body )
2017-06-08 14:15:41 +03:00
lastCommit := htmlDoc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
// Submit the edits
2017-06-17 07:49:45 +03:00
req = NewRequestWithValues ( t , "POST" , path . Join ( user , repo , "_edit" , branch , filePath ) ,
map [ string ] string {
"_csrf" : htmlDoc . GetCSRF ( ) ,
"last_commit" : lastCommit ,
"tree_path" : filePath ,
"content" : newContent ,
"commit_choice" : "direct" ,
} ,
2017-06-08 14:15:41 +03:00
)
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusFound )
2017-06-08 14:15:41 +03:00
// Verify the change
2017-10-30 05:04:25 +03:00
req = NewRequest ( t , "GET" , path . Join ( user , repo , "raw/branch" , branch , filePath ) )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2017-12-04 01:46:01 +03:00
assert . EqualValues ( t , newContent , resp . Body . String ( ) )
2017-06-15 14:20:39 +03:00
return resp
2017-06-08 14:15:41 +03:00
}
2017-12-04 01:46:01 +03:00
func testEditFileToNewBranch ( t * testing . T , session * TestSession , user , repo , branch , targetBranch , filePath , newContent string ) * httptest . ResponseRecorder {
2017-06-21 04:00:03 +03:00
// Get to the 'edit this file' page
req := NewRequest ( t , "GET" , path . Join ( user , repo , "_edit" , branch , filePath ) )
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 )
lastCommit := htmlDoc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
// Submit the edits
req = NewRequestWithValues ( t , "POST" , path . Join ( user , repo , "_edit" , branch , filePath ) ,
map [ string ] string {
"_csrf" : htmlDoc . GetCSRF ( ) ,
"last_commit" : lastCommit ,
"tree_path" : filePath ,
"content" : newContent ,
"commit_choice" : "commit-to-new-branch" ,
"new_branch_name" : targetBranch ,
} ,
)
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusFound )
2017-06-21 04:00:03 +03:00
// Verify the change
2017-10-30 05:04:25 +03:00
req = NewRequest ( t , "GET" , path . Join ( user , repo , "raw/branch" , targetBranch , filePath ) )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2017-12-04 01:46:01 +03:00
assert . EqualValues ( t , newContent , resp . Body . String ( ) )
2017-06-21 04:00:03 +03:00
return resp
}
2017-06-08 14:15:41 +03:00
func TestEditFile ( t * testing . T ) {
2019-05-11 18:29:17 +03:00
onGiteaRun ( t , func ( t * testing . T , u * url . URL ) {
session := loginUser ( t , "user2" )
testEditFile ( t , session , "user2" , "repo1" , "master" , "README.md" , "Hello, World (Edited)\n" )
} )
2017-06-08 14:15:41 +03:00
}
2017-06-21 04:00:03 +03:00
func TestEditFileToNewBranch ( t * testing . T ) {
2019-05-11 18:29:17 +03:00
onGiteaRun ( t , func ( t * testing . T , u * url . URL ) {
session := loginUser ( t , "user2" )
testEditFileToNewBranch ( t , session , "user2" , "repo1" , "master" , "feature/test" , "README.md" , "Hello, World (Edited)\n" )
} )
2017-06-21 04:00:03 +03:00
}