Files

206 lines
6.0 KiB
Go
Raw Permalink Normal View History

2017-08-17 23:52:28 +08:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// 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 (
"fmt"
2017-08-17 23:52:28 +08:00
"net/http"
"path"
2017-08-17 23:52:28 +08:00
"testing"
"code.gitea.io/gitea/modules/setting"
2019-05-11 18:21:34 +08:00
api "code.gitea.io/gitea/modules/structs"
"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
)
2025-07-04 19:03:22 +08:00
func assertLinkPageComplete(t *testing.T, session *TestSession, link string) {
req := NewRequest(t, "GET", link)
resp := session.MakeRequest(t, req, http.StatusOK)
assert.True(t, test.IsNormalPageCompleted(resp.Body.String()), "Page did not complete: "+link)
}
func TestLinks(t *testing.T) {
2022-09-02 15:18:23 -04:00
defer tests.PrepareTestEnv(t)()
2017-08-17 23:52:28 +08:00
2025-07-04 19:03:22 +08:00
t.Run("NoLogin", testLinksNoLogin)
t.Run("RedirectsNoLogin", testLinksRedirectsNoLogin)
t.Run("NoLoginNotExist", testLinksNoLoginNotExist)
t.Run("AsUser", testLinksAsUser)
t.Run("RepoCommon", testLinksRepoCommon)
}
func testLinksNoLogin(t *testing.T) {
2022-01-20 18:46:10 +01:00
links := []string{
2025-07-04 19:03:22 +08:00
"/",
2017-08-17 23:52:28 +08:00
"/explore/repos",
"/explore/repos?q=test",
2017-08-17 23:52:28 +08:00
"/explore/users",
"/explore/users?q=test",
2017-08-17 23:52:28 +08:00
"/explore/organizations",
"/explore/organizations?q=test",
2017-08-17 23:52:28 +08:00
"/user/sign_up",
"/user/login",
"/user/forgot_password",
2020-08-17 04:07:38 +01:00
"/user2/repo1",
"/user2/repo1/",
2020-08-17 04:07:38 +01:00
"/user2/repo1/projects",
"/user2/repo1/projects/1",
"/user2/repo1/releases/tag/delete-tag", // It's the only one existing record on release.yml which has is_tag: true
2025-07-04 19:03:22 +08:00
"/api/swagger",
2017-08-17 23:52:28 +08:00
}
for _, link := range links {
2025-07-04 19:03:22 +08:00
assertLinkPageComplete(t, nil, link)
2017-08-17 23:52:28 +08:00
}
2025-07-04 19:03:22 +08:00
MakeRequest(t, NewRequest(t, "GET", "/.well-known/security.txt"), http.StatusOK)
2017-08-17 23:52:28 +08:00
}
2025-07-04 19:03:22 +08:00
func testLinksRedirectsNoLogin(t *testing.T) {
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"},
2025-01-31 04:12:14 +08:00
{"/user2/repo1/src/master/a%2fb.txt", "/user2/repo1/src/branch/master/a%2fb.txt"},
{"/user2/repo1/src/master/directory/file.txt?a=1", "/user2/repo1/src/branch/master/directory/file.txt?a=1"},
{"/user2/repo1/src/branch/master/directory/file.txt?raw=1&other=2", "/user2/repo1/raw/branch/master/directory/file.txt"},
2025-01-31 04:12:14 +08:00
{"/user2/repo1/tree/a%2fb?a=1", "/user2/repo1/src/a%2fb?a=1"},
2025-03-14 15:45:11 +08:00
{"/user2/repo1/blob/123456/%20?a=1", "/user2/repo1/src/commit/123456/%20?a=1"},
2025-01-31 04:12:14 +08:00
{"/user/avatar/GhosT/-1", "/assets/img/avatar_default.png"},
{"/user/avatar/Gitea-ActionS/0", "/assets/img/avatar_default.png"},
2024-11-05 14:35:54 +08:00
{"/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)
resp := MakeRequest(t, req, http.StatusSeeOther)
2025-03-31 07:53:48 +02:00
assert.Equal(t, path.Join(setting.AppSubURL, c.to), test.RedirectURL(resp))
2017-10-29 19:04:25 -07:00
}
}
2025-07-04 19:03:22 +08:00
func testLinksNoLoginNotExist(t *testing.T) {
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)
}
}
2025-07-04 19:03:22 +08:00
func testLinksAsUser(t *testing.T) {
session := loginUser(t, "user2")
2022-01-20 18:46:10 +01:00
links := []string{
"/explore/repos",
"/explore/repos?q=test",
"/explore/users",
"/explore/users?q=test",
"/explore/organizations",
"/explore/organizations?q=test",
"/",
"/user/forgot_password",
2017-10-21 16:05:50 +02:00
"/api/swagger",
"/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",
"/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",
"/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",
"/user/settings/security",
"/user/settings/security/two_factor/enroll",
"/user/settings/keys",
"/user/settings/organization",
2018-05-15 12:07:32 +02:00
"/user/settings/repos",
}
for _, link := range links {
2025-07-04 19:03:22 +08:00
assertLinkPageComplete(t, session, link)
}
2025-07-04 19:03:22 +08:00
reqAPI := NewRequestf(t, "GET", "/api/v1/users/user2/repos")
respAPI := MakeRequest(t, reqAPI, http.StatusOK)
var apiRepos []*api.Repository
DecodeJSON(t, respAPI, &apiRepos)
2022-01-20 18:46:10 +01:00
repoLinks := []string{
"",
"/issues",
"/pulls",
2017-10-29 19:04:25 -07:00
"/commits/branch/master",
"/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",
"/activity",
}
for _, repo := range apiRepos {
for _, link := range repoLinks {
2025-07-04 19:03:22 +08:00
link = fmt.Sprintf("/user2/%s%s", repo.Name, link)
assertLinkPageComplete(t, session, link)
}
}
}
2025-07-04 19:03:22 +08:00
func testLinksRepoCommon(t *testing.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 {
2025-07-04 19:03:22 +08:00
assertLinkPageComplete(t, nil, repoLink+link)
}
// admin/owner user
session := loginUser(t, "user1")
for _, link := range links {
2025-07-04 19:03:22 +08:00
assertLinkPageComplete(t, session, repoLink+link)
}
// non-admin non-owner user
session = loginUser(t, "user2")
for _, link := range links {
2025-07-04 19:03:22 +08:00
assertLinkPageComplete(t, session, repoLink+link)
}
}