2017-10-15 22:59:24 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-10-15 22:59:24 +03:00
2022-09-02 22:18:23 +03:00
package integration
2017-10-15 22:59:24 +03:00
import (
"net/http"
2019-05-11 18:29:17 +03:00
"net/url"
2017-10-15 22:59:24 +03:00
"path"
"strings"
"testing"
2021-07-08 16:57:24 +03:00
"code.gitea.io/gitea/modules/setting"
2017-12-16 00:11:02 +03:00
"code.gitea.io/gitea/modules/test"
2022-06-26 17:19:22 +03:00
"code.gitea.io/gitea/modules/translation"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2017-12-16 00:11:02 +03:00
2017-10-15 22:59:24 +03:00
"github.com/stretchr/testify/assert"
)
2017-12-24 03:33:34 +03:00
func testCreateBranch ( t testing . TB , session * TestSession , user , repo , oldRefSubURL , newBranchName string , expectedStatus int ) string {
2017-10-15 22:59:24 +03:00
var csrf string
if expectedStatus == http . StatusNotFound {
2017-10-30 05:04:25 +03:00
csrf = GetCSRF ( t , session , path . Join ( user , repo , "src/branch/master" ) )
2017-10-15 22:59:24 +03:00
} else {
2017-10-30 05:04:25 +03:00
csrf = GetCSRF ( t , session , path . Join ( user , repo , "src" , oldRefSubURL ) )
2017-10-15 22:59:24 +03:00
}
2017-10-30 05:04:25 +03:00
req := NewRequestWithValues ( t , "POST" , path . Join ( user , repo , "branches/_new" , oldRefSubURL ) , map [ string ] string {
2017-10-15 22:59:24 +03:00
"_csrf" : csrf ,
"new_branch_name" : newBranchName ,
} )
resp := session . MakeRequest ( t , req , expectedStatus )
2022-03-23 07:54:07 +03:00
if expectedStatus != http . StatusSeeOther {
2017-10-15 22:59:24 +03:00
return ""
}
2017-12-16 00:11:02 +03:00
return test . RedirectURL ( resp )
2017-10-15 22:59:24 +03:00
}
func TestCreateBranch ( t * testing . T ) {
2019-05-11 18:29:17 +03:00
onGiteaRun ( t , testCreateBranches )
}
func testCreateBranches ( t * testing . T , giteaURL * url . URL ) {
2017-10-15 22:59:24 +03:00
tests := [ ] struct {
2017-10-30 05:04:25 +03:00
OldRefSubURL string
NewBranch string
CreateRelease string
FlashMessage string
ExpectedStatus int
2017-10-15 22:59:24 +03:00
} {
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : "feature/test1" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.create_success" , "feature/test1" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : "" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "form.NewBranchName" ) + translation . NewLocale ( "en-US" ) . Tr ( "form.require_error" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : "feature=test1" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.create_success" , "feature=test1" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : strings . Repeat ( "b" , 101 ) ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "form.NewBranchName" ) + translation . NewLocale ( "en-US" ) . Tr ( "form.max_size_error" , "100" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : "master" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.branch_already_exists" , "master" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : "master/test" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.branch_name_conflict" , "master/test" , "master" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "commit/acd1d892867872cb47f3993468605b8aa59aa2e0" ,
NewBranch : "feature/test2" ,
ExpectedStatus : http . StatusNotFound ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "commit/65f1bf27bc3bf70f64657658635e66094edbcb4d" ,
NewBranch : "feature/test3" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.create_success" , "feature/test3" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "branch/master" ,
NewBranch : "v1.0.0" ,
CreateRelease : "v1.0.0" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.tag_collision" , "v1.0.0" ) ,
2017-10-15 22:59:24 +03:00
} ,
{
2017-10-30 05:04:25 +03:00
OldRefSubURL : "tag/v1.0.0" ,
NewBranch : "feature/test4" ,
2020-11-09 00:24:54 +03:00
CreateRelease : "v1.0.1" ,
2022-03-23 07:54:07 +03:00
ExpectedStatus : http . StatusSeeOther ,
2022-06-26 17:19:22 +03:00
FlashMessage : translation . NewLocale ( "en-US" ) . Tr ( "repo.branch.create_success" , "feature/test4" ) ,
2017-10-15 22:59:24 +03:00
} ,
}
for _ , test := range tests {
session := loginUser ( t , "user2" )
if test . CreateRelease != "" {
createNewRelease ( t , session , "/user2/repo1" , test . CreateRelease , test . CreateRelease , false , false )
}
2017-10-30 05:04:25 +03:00
redirectURL := testCreateBranch ( t , session , "user2" , "repo1" , test . OldRefSubURL , test . NewBranch , test . ExpectedStatus )
2022-03-23 07:54:07 +03:00
if test . ExpectedStatus == http . StatusSeeOther {
2017-10-15 22:59:24 +03:00
req := NewRequest ( t , "GET" , redirectURL )
resp := session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
2023-07-08 06:19:00 +03:00
assert . Contains ( t ,
2017-10-15 22:59:24 +03:00
strings . TrimSpace ( htmlDoc . doc . Find ( ".ui.message" ) . Text ( ) ) ,
2023-07-08 06:19:00 +03:00
test . FlashMessage ,
2017-10-15 22:59:24 +03:00
)
}
}
}
func TestCreateBranchInvalidCSRF ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-10-15 22:59:24 +03:00
session := loginUser ( t , "user2" )
2017-10-30 05:04:25 +03:00
req := NewRequestWithValues ( t , "POST" , "user2/repo1/branches/_new/branch/master" , map [ string ] string {
2017-10-15 22:59:24 +03:00
"_csrf" : "fake_csrf" ,
"new_branch_name" : "test" ,
} )
2022-03-23 07:54:07 +03:00
resp := session . MakeRequest ( t , req , http . StatusSeeOther )
2021-07-08 16:57:24 +03:00
loc := resp . Header ( ) . Get ( "Location" )
assert . Equal ( t , setting . AppSubURL + "/" , loc )
resp = session . MakeRequest ( t , NewRequest ( t , "GET" , loc ) , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
assert . Equal ( t ,
2021-12-28 16:28:27 +03:00
"Bad Request: invalid CSRF token" ,
2021-07-08 16:57:24 +03:00
strings . TrimSpace ( htmlDoc . doc . Find ( ".ui.message" ) . Text ( ) ) ,
)
2017-10-15 22:59:24 +03:00
}