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 (
"bytes"
"net/http"
"net/url"
2017-06-08 19:15:41 +08:00
"path"
2017-05-02 03:49:55 +03:00
"testing"
"github.com/stretchr/testify/assert"
)
func TestCreateFile ( t * testing . T ) {
prepareTestEnv ( t )
session := loginUser ( t , "user2" , "password" )
// Request editor page
2017-06-09 20:41:36 -04:00
req := NewRequest ( t , "GET" , "/user2/repo1/_new/master/" )
2017-05-02 03:49:55 +03:00
resp := session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
doc , err := NewHtmlParser ( resp . Body )
assert . NoError ( t , err )
lastCommit := doc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
// Save new file to master branch
2017-06-09 20:41:36 -04:00
req = NewRequestBody ( t , "POST" , "/user2/repo1/_new/master/" ,
2017-05-02 03:49:55 +03:00
bytes . NewBufferString ( url . Values {
"_csrf" : [ ] string { doc . GetInputValueByName ( "_csrf" ) } ,
"last_commit" : [ ] string { lastCommit } ,
"tree_path" : [ ] string { "test.txt" } ,
"content" : [ ] string { "Content" } ,
"commit_choice" : [ ] string { "direct" } ,
} . Encode ( ) ) ,
)
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
resp = session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusFound , resp . HeaderCode )
}
func TestCreateFileOnProtectedBranch ( t * testing . T ) {
prepareTestEnv ( t )
session := loginUser ( t , "user2" , "password" )
// Open repository branch settings
2017-06-09 20:41:36 -04:00
req := NewRequest ( t , "GET" , "/user2/repo1/settings/branches" )
2017-05-02 03:49:55 +03:00
resp := session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
doc , err := NewHtmlParser ( resp . Body )
assert . NoError ( t , err )
// Change master branch to protected
2017-06-09 20:41:36 -04:00
req = NewRequestBody ( t , "POST" , "/user2/repo1/settings/branches?action=protected_branch" ,
2017-05-02 03:49:55 +03:00
bytes . NewBufferString ( url . Values {
"_csrf" : [ ] string { doc . GetInputValueByName ( "_csrf" ) } ,
"branchName" : [ ] string { "master" } ,
"canPush" : [ ] string { "true" } ,
} . Encode ( ) ) ,
)
assert . NoError ( t , err )
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
resp = session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
// Check if master branch has been locked successfully
flashCookie := session . GetCookie ( "macaron_flash" )
assert . NotNil ( t , flashCookie )
assert . EqualValues ( t , flashCookie . Value , "success%3Dmaster%2BLocked%2Bsuccessfully" )
// Request editor page
2017-06-09 20:41:36 -04:00
req = NewRequest ( t , "GET" , "/user2/repo1/_new/master/" )
2017-05-02 03:49:55 +03:00
resp = session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
doc , err = NewHtmlParser ( resp . Body )
assert . NoError ( t , err )
lastCommit := doc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
// Save new file to master branch
2017-06-09 20:41:36 -04:00
req = NewRequestBody ( t , "POST" , "/user2/repo1/_new/master/" ,
2017-05-02 03:49:55 +03:00
bytes . NewBufferString ( url . Values {
"_csrf" : [ ] string { doc . GetInputValueByName ( "_csrf" ) } ,
"last_commit" : [ ] string { lastCommit } ,
"tree_path" : [ ] string { "test.txt" } ,
"content" : [ ] string { "Content" } ,
"commit_choice" : [ ] string { "direct" } ,
} . Encode ( ) ) ,
)
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
resp = session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
// Check body for error message
assert . Contains ( t , string ( resp . Body ) , "Can not commit to protected branch 'master'." )
}
2017-06-08 19:15:41 +08:00
2017-06-15 19:20:39 +08:00
func testEditFile ( t * testing . T , session * TestSession , user , repo , branch , filePath string ) * TestResponse {
2017-06-08 19:15:41 +08:00
newContent := "Hello, World (Edited)\n"
// Get to the 'edit this file' page
2017-06-09 20:41:36 -04:00
req := NewRequest ( t , "GET" , path . Join ( user , repo , "_edit" , branch , filePath ) )
2017-06-08 19:15:41 +08:00
resp := session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
htmlDoc , err := NewHtmlParser ( resp . Body )
assert . NoError ( t , err )
lastCommit := htmlDoc . GetInputValueByName ( "last_commit" )
assert . NotEmpty ( t , lastCommit )
// Submit the edits
2017-06-09 20:41:36 -04:00
req = NewRequestBody ( t , "POST" , path . Join ( user , repo , "_edit" , branch , filePath ) ,
2017-06-08 19:15:41 +08:00
bytes . NewBufferString ( url . Values {
"_csrf" : [ ] string { htmlDoc . GetInputValueByName ( "_csrf" ) } ,
"last_commit" : [ ] string { lastCommit } ,
"tree_path" : [ ] string { filePath } ,
"content" : [ ] string { newContent } ,
"commit_choice" : [ ] string { "direct" } ,
} . Encode ( ) ) ,
)
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
resp = session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusFound , resp . HeaderCode )
// Verify the change
2017-06-09 20:41:36 -04:00
req = NewRequest ( t , "GET" , path . Join ( user , repo , "raw" , branch , filePath ) )
2017-06-08 19:15:41 +08:00
resp = session . MakeRequest ( t , req )
assert . EqualValues ( t , http . StatusOK , resp . HeaderCode )
assert . EqualValues ( t , newContent , string ( resp . Body ) )
2017-06-15 19:20:39 +08:00
return resp
2017-06-08 19:15:41 +08:00
}
func TestEditFile ( t * testing . T ) {
prepareTestEnv ( t )
session := loginUser ( t , "user2" , "password" )
testEditFile ( t , session , "user2" , "repo1" , "master" , "README.md" )
}