@ -15,38 +15,167 @@ import (
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
)
func TestAPIReposGetDefaultIssueConfig ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
func createIssueConfig ( t * testing . T , user * user_model . User , repo * repo_model . Repository , issueConfig map [ string ] any ) {
config , err := yaml . Marshal ( issueConfig )
assert . NoError ( t , err )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } )
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
err = createOrReplaceFileInBranch ( user , repo , ".gitea/ISSUE_TEMPLATE/config.yaml" , repo . DefaultBranch , string ( config ) )
assert . NoError ( t , err )
}
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issue_config" , owner . Name , repo . Name )
func getIssueConfig ( t * testing . T , owner , repo string ) api . IssueConfig {
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issue_config" , owner , repo )
req := NewRequest ( t , "GET" , urlStr )
resp := MakeRequest ( t , req , http . StatusOK )
var issueConfig api . IssueConfig
DecodeJSON ( t , resp , & issueConfig )
assert . True ( t , issueConfig . BlankIssuesEnabled )
assert . Equal ( t , issueConfig . ContactLinks , make ( [ ] api . IssueConfigContactLink , 0 ) )
return issueConfig
}
func TestAPIRepoGetIssueConfig ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 49 } )
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
t . Run ( "Default" , func ( t * testing . T ) {
issueConfig := getIssueConfig ( t , owner . Name , repo . Name )
assert . True ( t , issueConfig . BlankIssuesEnabled )
assert . Len ( t , issueConfig . ContactLinks , 0 )
} )
t . Run ( "DisableBlankIssues" , func ( t * testing . T ) {
config := make ( map [ string ] any )
config [ "blank_issues_enabled" ] = false
createIssueConfig ( t , owner , repo , config )
issueConfig := getIssueConfig ( t , owner . Name , repo . Name )
assert . False ( t , issueConfig . BlankIssuesEnabled )
assert . Len ( t , issueConfig . ContactLinks , 0 )
} )
t . Run ( "ContactLinks" , func ( t * testing . T ) {
contactLink := make ( map [ string ] string )
contactLink [ "name" ] = "TestName"
contactLink [ "url" ] = "https://example.com"
contactLink [ "about" ] = "TestAbout"
config := make ( map [ string ] any )
config [ "contact_links" ] = [ ] map [ string ] string { contactLink }
createIssueConfig ( t , owner , repo , config )
issueConfig := getIssueConfig ( t , owner . Name , repo . Name )
assert . True ( t , issueConfig . BlankIssuesEnabled )
assert . Len ( t , issueConfig . ContactLinks , 1 )
assert . Equal ( t , "TestName" , issueConfig . ContactLinks [ 0 ] . Name )
assert . Equal ( t , "https://example.com" , issueConfig . ContactLinks [ 0 ] . URL )
assert . Equal ( t , "TestAbout" , issueConfig . ContactLinks [ 0 ] . About )
} )
t . Run ( "Full" , func ( t * testing . T ) {
contactLink := make ( map [ string ] string )
contactLink [ "name" ] = "TestName"
contactLink [ "url" ] = "https://example.com"
contactLink [ "about" ] = "TestAbout"
config := make ( map [ string ] any )
config [ "blank_issues_enabled" ] = false
config [ "contact_links" ] = [ ] map [ string ] string { contactLink }
createIssueConfig ( t , owner , repo , config )
issueConfig := getIssueConfig ( t , owner . Name , repo . Name )
assert . False ( t , issueConfig . BlankIssuesEnabled )
assert . Len ( t , issueConfig . ContactLinks , 1 )
assert . Equal ( t , "TestName" , issueConfig . ContactLinks [ 0 ] . Name )
assert . Equal ( t , "https://example.com" , issueConfig . ContactLinks [ 0 ] . URL )
assert . Equal ( t , "TestAbout" , issueConfig . ContactLinks [ 0 ] . About )
} )
}
func TestAPIReposValidateDefaultIssueConfig ( t * testing . T ) {
func TestAPIRepoIssueConfigPaths ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 49 } )
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
templateConfigCandidates := [ ] string {
".gitea/ISSUE_TEMPLATE/config" ,
".gitea/issue_template/config" ,
".github/ISSUE_TEMPLATE/config" ,
".github/issue_template/config" ,
}
for _ , canidate := range templateConfigCandidates {
for _ , extension := range [ ] string { ".yaml" , ".yml" } {
fullPath := canidate + extension
t . Run ( fullPath , func ( t * testing . T ) {
configMap := make ( map [ string ] any )
configMap [ "blank_issues_enabled" ] = false
configData , err := yaml . Marshal ( configMap )
assert . NoError ( t , err )
_ , err = createFileInBranch ( owner , repo , fullPath , repo . DefaultBranch , string ( configData ) )
assert . NoError ( t , err )
issueConfig := getIssueConfig ( t , owner . Name , repo . Name )
assert . False ( t , issueConfig . BlankIssuesEnabled )
assert . Len ( t , issueConfig . ContactLinks , 0 )
_ , err = deleteFileInBranch ( owner , repo , fullPath , repo . DefaultBranch )
assert . NoError ( t , err )
} )
}
}
}
func TestAPIRepoValidateIssueConfig ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 49 } )
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issue_config/validate" , owner . Name , repo . Name )
req := NewRequest ( t , "GET" , urlStr )
resp := MakeRequest ( t , req , http . StatusOK )
var issueConfigValidation api . IssueConfigValidation
DecodeJSON ( t , resp , & issueConfigValidation )
t . Run ( "Valid" , func ( t * testing . T ) {
req := NewRequest ( t , "GET" , urlStr )
resp := MakeRequest ( t , req , http . StatusOK )
var issueConfigValidation api . IssueConfigValidation
DecodeJSON ( t , resp , & issueConfigValidation )
assert . True ( t , issueConfigValidation . Valid )
assert . Empty ( t , issueConfigValidation . Message )
} )
t . Run ( "Invalid" , func ( t * testing . T ) {
config := make ( map [ string ] any )
config [ "blank_issues_enabled" ] = "Test"
createIssueConfig ( t , owner , repo , config )
req := NewRequest ( t , "GET" , urlStr )
resp := MakeRequest ( t , req , http . StatusOK )
var issueConfigValidation api . IssueConfigValidation
DecodeJSON ( t , resp , & issueConfigValidation )
assert . True ( t , issueConfigValidation . Valid )
assert . Empty ( t , issueConfigValidation . Message )
assert . False ( t , issueConfigValidation . Valid )
assert . NotEmpty ( t , issueConfigValidation . Message )
} )
}