2017-08-17 23:52:28 +08:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2017-08-17 23:52:28 +08:00
2022-09-02 15:18:23 -04:00
package integration
2017-08-17 23:52:28 +08:00
import (
2017-08-23 17:53:35 +08:00
"fmt"
2017-08-17 23:52:28 +08:00
"net/http"
2017-11-02 23:01:22 +01:00
"path"
2017-08-17 23:52:28 +08:00
"testing"
2017-08-23 17:53:35 +08:00
2017-11-02 23:01:22 +01:00
"code.gitea.io/gitea/modules/setting"
2019-05-11 18:21:34 +08:00
api "code.gitea.io/gitea/modules/structs"
2017-12-15 13:11:02 -08:00
"code.gitea.io/gitea/modules/test"
2022-09-02 15:18:23 -04:00
"code.gitea.io/gitea/tests"
2017-10-29 19:04:25 -07:00
"github.com/stretchr/testify/assert"
2017-08-17 23:52:28 +08:00
)
func TestLinksNoLogin ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2017-08-17 23:52:28 +08:00
2022-01-20 18:46:10 +01:00
links := [ ] string {
2017-08-17 23:52:28 +08:00
"/explore/repos" ,
2022-06-15 18:05:32 +03:00
"/explore/repos?q=test" ,
2017-08-17 23:52:28 +08:00
"/explore/users" ,
2022-06-15 18:05:32 +03:00
"/explore/users?q=test" ,
2017-08-17 23:52:28 +08:00
"/explore/organizations" ,
2022-06-15 18:05:32 +03:00
"/explore/organizations?q=test" ,
2017-08-17 23:52:28 +08:00
"/" ,
"/user/sign_up" ,
"/user/login" ,
"/user/forgot_password" ,
2017-10-21 16:05:50 +02:00
"/api/swagger" ,
2020-08-17 04:07:38 +01:00
"/user2/repo1" ,
2021-12-24 16:50:49 +00:00
"/user2/repo1/" ,
2020-08-17 04:07:38 +01:00
"/user2/repo1/projects" ,
"/user2/repo1/projects/1" ,
Fix a bug returning 404 when display a single tag with no release (#29466)
Partially caused by #29149
When use
```go
releases, err := getReleaseInfos(ctx, &repo_model.FindReleasesOptions{
ListOptions: db.ListOptions{Page: 1, PageSize: 1},
RepoID: ctx.Repo.Repository.ID,
TagNames: []string{ctx.Params("*")},
// only show draft releases for users who can write, read-only users shouldn't see draft releases.
IncludeDrafts: writeAccess,
})
```
replace
```go
release, err := repo_model.GetRelease(ctx, ctx.Repo.Repository.ID, ctx.Params("*"))
```
It missed `IncludeTags: true,`. That means this bug will be occupied only when the release is a tag.
This PR will fix
- Get the right tag record when it's not a release
- Display correct tag tab but not release tag when it's a tag.
- The button will bring the tag name to the new page when it's a single tag page
- the new page will automatically hide the release target inputbox when the tag name is pre filled. This should be backport to v1.21.
2024-03-02 22:03:39 +08:00
"/user2/repo1/releases/tag/delete-tag" , // It's the only one existing record on release.yml which has is_tag: true
2023-07-21 20:14:20 +08:00
"/.well-known/security.txt" ,
2017-08-17 23:52:28 +08:00
}
for _ , link := range links {
req := NewRequest ( t , "GET" , link )
MakeRequest ( t , req , http . StatusOK )
}
}
2017-08-23 17:53:35 +08:00
2017-10-29 19:04:25 -07:00
func TestRedirectsNoLogin ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2017-10-29 19:04:25 -07:00
2024-11-05 14:35:54 +08:00
redirects := [ ] struct { from , to string } {
{ "/user2/repo1/commits/master" , "/user2/repo1/commits/branch/master" } ,
{ "/user2/repo1/src/master" , "/user2/repo1/src/branch/master" } ,
{ "/user2/repo1/src/master/file.txt" , "/user2/repo1/src/branch/master/file.txt" } ,
{ "/user2/repo1/src/master/directory/file.txt" , "/user2/repo1/src/branch/master/directory/file.txt" } ,
{ "/user/avatar/Ghost/-1" , "/assets/img/avatar_default.png" } ,
{ "/api/v1/swagger" , "/api/swagger" } ,
2017-10-29 19:04:25 -07:00
}
2024-11-05 14:35:54 +08:00
for _ , c := range redirects {
req := NewRequest ( t , "GET" , c . from )
2022-03-23 05:54:07 +01:00
resp := MakeRequest ( t , req , http . StatusSeeOther )
2024-11-05 14:35:54 +08:00
assert . EqualValues ( t , path . Join ( setting . AppSubURL , c . to ) , test . RedirectURL ( resp ) )
2017-10-29 19:04:25 -07:00
}
}
2020-08-17 04:07:38 +01:00
func TestNoLoginNotExist ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2020-08-17 04:07:38 +01:00
2022-01-20 18:46:10 +01:00
links := [ ] string {
2020-08-17 04:07:38 +01:00
"/user5/repo4/projects" ,
"/user5/repo4/projects/3" ,
}
for _ , link := range links {
req := NewRequest ( t , "GET" , link )
MakeRequest ( t , req , http . StatusNotFound )
}
}
2017-08-23 17:53:35 +08:00
func testLinksAsUser ( userName string , t * testing . T ) {
2022-01-20 18:46:10 +01:00
links := [ ] string {
2017-08-23 17:53:35 +08:00
"/explore/repos" ,
2022-06-15 18:05:32 +03:00
"/explore/repos?q=test" ,
2017-08-23 17:53:35 +08:00
"/explore/users" ,
2022-06-15 18:05:32 +03:00
"/explore/users?q=test" ,
2017-08-23 17:53:35 +08:00
"/explore/organizations" ,
2022-06-15 18:05:32 +03:00
"/explore/organizations?q=test" ,
2017-08-23 17:53:35 +08:00
"/" ,
"/user/forgot_password" ,
2017-10-21 16:05:50 +02:00
"/api/swagger" ,
2017-08-23 17:53:35 +08:00
"/issues" ,
2019-12-02 04:50:36 +01:00
"/issues?type=your_repositories&repos=[0]&sort=&state=open" ,
"/issues?type=assigned&repos=[0]&sort=&state=open" ,
"/issues?type=your_repositories&repos=[0]&sort=&state=closed" ,
"/issues?type=assigned&repos=[]&sort=&state=closed" ,
"/issues?type=assigned&sort=&state=open" ,
"/issues?type=created_by&repos=[1,2]&sort=&state=closed" ,
"/issues?type=created_by&repos=[1,2]&sort=&state=open" ,
2017-08-23 17:53:35 +08:00
"/pulls" ,
2019-12-02 04:50:36 +01:00
"/pulls?type=your_repositories&repos=[2]&sort=&state=open" ,
"/pulls?type=assigned&repos=[]&sort=&state=open" ,
"/pulls?type=created_by&repos=[0]&sort=&state=open" ,
"/pulls?type=your_repositories&repos=[0]&sort=&state=closed" ,
"/pulls?type=assigned&repos=[0]&sort=&state=closed" ,
"/pulls?type=created_by&repos=[0]&sort=&state=closed" ,
2019-12-15 08:20:08 -06:00
"/milestones" ,
"/milestones?sort=mostcomplete&state=closed" ,
"/milestones?type=your_repositories&sort=mostcomplete&state=closed" ,
"/milestones?sort=&repos=[1]&state=closed" ,
"/milestones?sort=&repos=[1]&state=open" ,
"/milestones?repos=[0]&sort=mostissues&state=open" ,
2017-08-23 17:53:35 +08:00
"/notifications" ,
"/repo/create" ,
"/repo/migrate" ,
"/org/create" ,
"/user2" ,
"/user2?tab=stars" ,
"/user2?tab=activity" ,
"/user/settings" ,
2018-05-15 12:07:32 +02:00
"/user/settings/account" ,
2017-10-16 17:14:12 +08:00
"/user/settings/security" ,
"/user/settings/security/two_factor/enroll" ,
2017-08-23 17:53:35 +08:00
"/user/settings/keys" ,
"/user/settings/organization" ,
2018-05-15 12:07:32 +02:00
"/user/settings/repos" ,
2017-08-23 17:53:35 +08:00
}
session := loginUser ( t , userName )
for _ , link := range links {
req := NewRequest ( t , "GET" , link )
session . MakeRequest ( t , req , http . StatusOK )
}
reqAPI := NewRequestf ( t , "GET" , "/api/v1/users/%s/repos" , userName )
respAPI := MakeRequest ( t , reqAPI , http . StatusOK )
2019-05-28 23:45:54 +08:00
var apiRepos [ ] * api . Repository
2017-08-23 17:53:35 +08:00
DecodeJSON ( t , respAPI , & apiRepos )
2022-01-20 18:46:10 +01:00
repoLinks := [ ] string {
2017-08-23 17:53:35 +08:00
"" ,
"/issues" ,
"/pulls" ,
2017-10-29 19:04:25 -07:00
"/commits/branch/master" ,
2017-08-23 17:53:35 +08:00
"/graph" ,
"/settings" ,
"/settings/collaboration" ,
"/settings/branches" ,
"/settings/hooks" ,
// FIXME: below links should return 200 but 404 ??
//"/settings/hooks/git",
//"/settings/hooks/git/pre-receive",
//"/settings/hooks/git/update",
//"/settings/hooks/git/post-receive",
"/settings/keys" ,
"/releases" ,
"/releases/new" ,
//"/wiki/_pages",
2021-11-16 18:18:25 +00:00
"/wiki/?action=_new" ,
2023-10-02 15:56:55 +08:00
"/activity" ,
2017-08-23 17:53:35 +08:00
}
for _ , repo := range apiRepos {
for _ , link := range repoLinks {
req := NewRequest ( t , "GET" , fmt . Sprintf ( "/%s/%s%s" , userName , repo . Name , link ) )
session . MakeRequest ( t , req , http . StatusOK )
}
}
}
func TestLinksLogin ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2017-08-23 17:53:35 +08:00
testLinksAsUser ( "user2" , t )
}
2023-10-02 15:56:55 +08:00
func TestRepoLinks ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
// repo1 has enabled almost features, so we can test most links
repoLink := "/user2/repo1"
links := [ ] string {
"/actions" ,
"/packages" ,
"/projects" ,
}
// anonymous user
for _ , link := range links {
req := NewRequest ( t , "GET" , repoLink + link )
MakeRequest ( t , req , http . StatusOK )
}
// admin/owner user
session := loginUser ( t , "user1" )
for _ , link := range links {
req := NewRequest ( t , "GET" , repoLink + link )
session . MakeRequest ( t , req , http . StatusOK )
}
// non-admin non-owner user
session = loginUser ( t , "user2" )
for _ , link := range links {
req := NewRequest ( t , "GET" , repoLink + link )
session . MakeRequest ( t , req , http . StatusOK )
}
}