mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-22 10:02:29 +00:00
templates/swagger/v1_json.tmpl updated with `make generate-swagger` (cherry picked from commit88899c492e) (cherry picked from commit7171bd9617) (cherry picked from commit1a742446c1) (cherry picked from commitd7c189d7b2) Conflicts: routers/web/web.go (cherry picked from commitcbdea868e4) (cherry picked from commit6cd150483b) (cherry picked from commit47246da8d3) (cherry picked from commitf2aa0e6b76) (cherry picked from commit5a4fc69a16) (cherry picked from commit48e444ca09) (cherry picked from commit888e537811) (cherry picked from commit5121f493c9) (cherry picked from commit9394e55fdf) (cherry picked from commit3a2ce51768) (cherry picked from commit719ead3a65) (cherry picked from commit83e6f82e2a) (cherry picked from commit494a429b21) (cherry picked from commit4d775db6b4) (cherry picked from commitb68f777dc2) (cherry picked from commit5b934023fa) (cherry picked from commit3b1ed8b16c) (cherry picked from commit6bc4a46c9f) (cherry picked from commit8064bb24a3) Conflicts: templates/admin/hook_new.tmpl templates/org/settings/hook_new.tmpl templates/repo/settings/webhook/base_list.tmpl templates/repo/settings/webhook/new.tmpl templates/user/settings/hook_new.tmpl https://codeberg.org/forgejo/forgejo/pulls/1181 (cherry picked from commit55f5588a91)
206 lines
6 KiB
Go
206 lines
6 KiB
Go
// Copyright 2017 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"path"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/modules/setting"
|
|
api "code.gitea.io/gitea/modules/structs"
|
|
"code.gitea.io/gitea/modules/test"
|
|
"code.gitea.io/gitea/tests"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestLinksNoLogin(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
|
|
links := []string{
|
|
"/explore/repos",
|
|
"/explore/repos?q=test",
|
|
"/explore/users",
|
|
"/explore/users?q=test",
|
|
"/explore/organizations",
|
|
"/explore/organizations?q=test",
|
|
"/",
|
|
"/user/sign_up",
|
|
"/user/login",
|
|
"/user/forgot_password",
|
|
"/api/swagger",
|
|
"/user2/repo1",
|
|
"/user2/repo1/",
|
|
"/user2/repo1/projects",
|
|
"/user2/repo1/projects/1",
|
|
"/assets/img/404.png",
|
|
"/assets/img/500.png",
|
|
"/.well-known/security.txt",
|
|
}
|
|
|
|
for _, link := range links {
|
|
req := NewRequest(t, "GET", link)
|
|
MakeRequest(t, req, http.StatusOK)
|
|
}
|
|
}
|
|
|
|
func TestRedirectsNoLogin(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
|
|
redirects := map[string]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",
|
|
}
|
|
for link, redirectLink := range redirects {
|
|
req := NewRequest(t, "GET", link)
|
|
resp := MakeRequest(t, req, http.StatusSeeOther)
|
|
assert.EqualValues(t, path.Join(setting.AppSubURL, redirectLink), test.RedirectURL(resp))
|
|
}
|
|
}
|
|
|
|
func TestNoLoginNotExist(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
|
|
links := []string{
|
|
"/user5/repo4/projects",
|
|
"/user5/repo4/projects/3",
|
|
}
|
|
|
|
for _, link := range links {
|
|
req := NewRequest(t, "GET", link)
|
|
MakeRequest(t, req, http.StatusNotFound)
|
|
}
|
|
}
|
|
|
|
func testLinksAsUser(userName string, t *testing.T) {
|
|
links := []string{
|
|
"/explore/repos",
|
|
"/explore/repos?q=test",
|
|
"/explore/users",
|
|
"/explore/users?q=test",
|
|
"/explore/organizations",
|
|
"/explore/organizations?q=test",
|
|
"/",
|
|
"/user/forgot_password",
|
|
"/api/swagger",
|
|
"/issues",
|
|
"/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",
|
|
"/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",
|
|
"/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",
|
|
"/user/settings/account",
|
|
"/user/settings/security",
|
|
"/user/settings/security/two_factor/enroll",
|
|
"/user/settings/keys",
|
|
"/user/settings/organization",
|
|
"/user/settings/repos",
|
|
}
|
|
|
|
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)
|
|
|
|
var apiRepos []*api.Repository
|
|
DecodeJSON(t, respAPI, &apiRepos)
|
|
|
|
repoLinks := []string{
|
|
"",
|
|
"/issues",
|
|
"/pulls",
|
|
"/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",
|
|
"/wiki/?action=_new",
|
|
}
|
|
|
|
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) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
|
|
testLinksAsUser("user2", t)
|
|
}
|
|
|
|
func TestRedirectsWebhooks(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
|
|
//
|
|
// A redirect means the route exists but not if it performs as intended.
|
|
//
|
|
for _, kind := range []string{"forgejo", "gitea"} {
|
|
redirects := []struct {
|
|
from string
|
|
to string
|
|
verb string
|
|
}{
|
|
{from: "/user2/repo1/settings/hooks/" + kind + "/new", to: "/user/login", verb: "GET"},
|
|
{from: "/user/settings/hooks/" + kind + "/new", to: "/user/login", verb: "GET"},
|
|
{from: "/admin/system-hooks/" + kind + "/new", to: "/user/login", verb: "GET"},
|
|
{from: "/admin/default-hooks/" + kind + "/new", to: "/user/login", verb: "GET"},
|
|
{from: "/user2/repo1/settings/hooks/" + kind + "/new", to: "/", verb: "POST"},
|
|
{from: "/admin/system-hooks/" + kind + "/new", to: "/", verb: "POST"},
|
|
{from: "/admin/default-hooks/" + kind + "/new", to: "/", verb: "POST"},
|
|
{from: "/user2/repo1/settings/hooks/" + kind + "/1", to: "/", verb: "POST"},
|
|
{from: "/admin/hooks/" + kind + "/1", to: "/", verb: "POST"},
|
|
}
|
|
for _, info := range redirects {
|
|
req := NewRequest(t, info.verb, info.from)
|
|
resp := MakeRequest(t, req, http.StatusSeeOther)
|
|
assert.EqualValues(t, path.Join(setting.AppSubURL, info.to), test.RedirectURL(resp), info.from)
|
|
}
|
|
}
|
|
}
|