@ -88,3 +88,70 @@ func Test_IsValidExternalURL(t *testing.T) {
} )
} )
}
}
}
}
func Test_IsValidExternalTrackerURLFormat ( t * testing . T ) {
setting . AppURL = "https://try.gitea.io/"
cases := [ ] struct {
description string
url string
valid bool
} {
{
description : "Correct external tracker URL with all placeholders" ,
url : "https://github.com/{user}/{repo}/issues/{index}" ,
valid : true ,
} ,
{
description : "Local external tracker URL with all placeholders" ,
url : "https://127.0.0.1/{user}/{repo}/issues/{index}" ,
valid : false ,
} ,
{
description : "External tracker URL with typo placeholder" ,
url : "https://github.com/{user}/{repo/issues/{index}" ,
valid : false ,
} ,
{
description : "External tracker URL with typo placeholder" ,
url : "https://github.com/[user}/{repo/issues/{index}" ,
valid : false ,
} ,
{
description : "External tracker URL with typo placeholder" ,
url : "https://github.com/{user}/repo}/issues/{index}" ,
valid : false ,
} ,
{
description : "External tracker URL missing optional placeholder" ,
url : "https://github.com/{user}/issues/{index}" ,
valid : true ,
} ,
{
description : "External tracker URL missing optional placeholder" ,
url : "https://github.com/{repo}/issues/{index}" ,
valid : true ,
} ,
{
description : "External tracker URL missing optional placeholder" ,
url : "https://github.com/issues/{index}" ,
valid : true ,
} ,
{
description : "External tracker URL missing optional placeholder" ,
url : "https://github.com/issues/{user}" ,
valid : true ,
} ,
{
description : "External tracker URL with similar placeholder names test" ,
url : "https://github.com/user/repo/issues/{index}" ,
valid : true ,
} ,
}
for _ , testCase := range cases {
t . Run ( testCase . description , func ( t * testing . T ) {
assert . Equal ( t , testCase . valid , IsValidExternalTrackerURLFormat ( testCase . url ) )
} )
}
}