2019-11-11 18:15:29 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-11-11 18:15:29 +03:00
2022-09-02 22:18:23 +03:00
package integration
2019-11-11 18:15:29 +03:00
import (
"fmt"
"net/http"
"net/http/httptest"
2023-06-21 00:14:47 +03:00
"strings"
2019-11-11 18:15:29 +03:00
"testing"
2021-11-16 11:53:21 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2023-06-21 00:14:47 +03:00
"code.gitea.io/gitea/modules/setting"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2019-11-11 18:15:29 +03:00
"github.com/stretchr/testify/assert"
)
2023-06-21 00:14:47 +03:00
func testRepoGenerate ( t * testing . T , session * TestSession , templateID , templateOwnerName , templateRepoName , generateOwnerName , generateRepoName string ) * httptest . ResponseRecorder {
2022-08-16 05:22:25 +03:00
generateOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { Name : generateOwnerName } )
2019-11-11 18:15:29 +03:00
// Step0: check the existence of the generated repo
req := NewRequestf ( t , "GET" , "/%s/%s" , generateOwnerName , generateRepoName )
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusNotFound )
2019-11-11 18:15:29 +03:00
// Step1: go to the main page of template repo
req = NewRequestf ( t , "GET" , "/%s/%s" , templateOwnerName , templateRepoName )
2021-11-18 04:33:06 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2019-11-11 18:15:29 +03:00
// Step2: click the "Use this template" button
htmlDoc := NewHTMLParser ( t , resp . Body )
link , exists := htmlDoc . doc . Find ( "a.ui.button[href^=\"/repo/create\"]" ) . Attr ( "href" )
assert . True ( t , exists , "The template has changed" )
req = NewRequest ( t , "GET" , link )
resp = session . MakeRequest ( t , req , http . StatusOK )
// Step3: fill the form of the create
htmlDoc = NewHTMLParser ( t , resp . Body )
link , exists = htmlDoc . doc . Find ( "form.ui.form[action^=\"/repo/create\"]" ) . Attr ( "action" )
assert . True ( t , exists , "The template has changed" )
_ , exists = htmlDoc . doc . Find ( fmt . Sprintf ( ".owner.dropdown .item[data-value=\"%d\"]" , generateOwner . ID ) ) . Attr ( "data-value" )
assert . True ( t , exists , fmt . Sprintf ( "Generate owner '%s' is not present in select box" , generateOwnerName ) )
req = NewRequestWithValues ( t , "POST" , link , map [ string ] string {
2023-06-21 00:14:47 +03:00
"_csrf" : htmlDoc . GetCSRF ( ) ,
"uid" : fmt . Sprintf ( "%d" , generateOwner . ID ) ,
"repo_name" : generateRepoName ,
"repo_template" : templateID ,
"git_content" : "true" ,
2019-11-11 18:15:29 +03:00
} )
2022-06-20 13:02:49 +03:00
session . MakeRequest ( t , req , http . StatusSeeOther )
2019-11-11 18:15:29 +03:00
// Step4: check the existence of the generated repo
req = NewRequestf ( t , "GET" , "/%s/%s" , generateOwnerName , generateRepoName )
2023-06-21 00:14:47 +03:00
session . MakeRequest ( t , req , http . StatusOK )
// Step5: check substituted values in Readme
req = NewRequestf ( t , "GET" , "/%s/%s/raw/branch/master/README.md" , generateOwnerName , generateRepoName )
resp = session . MakeRequest ( t , req , http . StatusOK )
body := fmt . Sprintf ( ` # % s Readme
Owner : % s
Link : / % s / % s
Clone URL : % s % s / % s . git ` ,
generateRepoName ,
strings . ToUpper ( generateOwnerName ) ,
generateOwnerName ,
generateRepoName ,
setting . AppURL ,
generateOwnerName ,
generateRepoName )
assert . Equal ( t , body , resp . Body . String ( ) )
// Step6: check substituted values in substituted file path ${REPO_NAME}
req = NewRequestf ( t , "GET" , "/%s/%s/raw/branch/master/%s.log" , generateOwnerName , generateRepoName , generateRepoName )
2019-11-11 18:15:29 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2023-06-21 00:14:47 +03:00
assert . Equal ( t , generateRepoName , resp . Body . String ( ) )
2019-11-11 18:15:29 +03:00
return resp
}
func TestRepoGenerate ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-11-11 18:15:29 +03:00
session := loginUser ( t , "user1" )
2023-06-21 00:14:47 +03:00
testRepoGenerate ( t , session , "44" , "user27" , "template1" , "user1" , "generated1" )
2019-11-11 18:15:29 +03:00
}
func TestRepoGenerateToOrg ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-11-11 18:15:29 +03:00
session := loginUser ( t , "user2" )
2023-06-21 00:14:47 +03:00
testRepoGenerate ( t , session , "44" , "user27" , "template1" , "user2" , "generated2" )
2019-11-11 18:15:29 +03:00
}