code.gitea.io/gitea@v1.22.3/tests/integration/links_test.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "fmt" 8 "net/http" 9 "path" 10 "testing" 11 12 "code.gitea.io/gitea/modules/setting" 13 api "code.gitea.io/gitea/modules/structs" 14 "code.gitea.io/gitea/modules/test" 15 "code.gitea.io/gitea/tests" 16 17 "github.com/stretchr/testify/assert" 18 ) 19 20 func TestLinksNoLogin(t *testing.T) { 21 defer tests.PrepareTestEnv(t)() 22 23 links := []string{ 24 "/explore/repos", 25 "/explore/repos?q=test", 26 "/explore/users", 27 "/explore/users?q=test", 28 "/explore/organizations", 29 "/explore/organizations?q=test", 30 "/", 31 "/user/sign_up", 32 "/user/login", 33 "/user/forgot_password", 34 "/api/swagger", 35 "/user2/repo1", 36 "/user2/repo1/", 37 "/user2/repo1/projects", 38 "/user2/repo1/projects/1", 39 "/user2/repo1/releases/tag/delete-tag", // It's the only one existing record on release.yml which has is_tag: true 40 "/assets/img/404.png", 41 "/assets/img/500.png", 42 "/.well-known/security.txt", 43 } 44 45 for _, link := range links { 46 req := NewRequest(t, "GET", link) 47 MakeRequest(t, req, http.StatusOK) 48 } 49 } 50 51 func TestRedirectsNoLogin(t *testing.T) { 52 defer tests.PrepareTestEnv(t)() 53 54 redirects := map[string]string{ 55 "/user2/repo1/commits/master": "/user2/repo1/commits/branch/master", 56 "/user2/repo1/src/master": "/user2/repo1/src/branch/master", 57 "/user2/repo1/src/master/file.txt": "/user2/repo1/src/branch/master/file.txt", 58 "/user2/repo1/src/master/directory/file.txt": "/user2/repo1/src/branch/master/directory/file.txt", 59 "/user/avatar/Ghost/-1": "/assets/img/avatar_default.png", 60 "/api/v1/swagger": "/api/swagger", 61 } 62 for link, redirectLink := range redirects { 63 req := NewRequest(t, "GET", link) 64 resp := MakeRequest(t, req, http.StatusSeeOther) 65 assert.EqualValues(t, path.Join(setting.AppSubURL, redirectLink), test.RedirectURL(resp)) 66 } 67 } 68 69 func TestNoLoginNotExist(t *testing.T) { 70 defer tests.PrepareTestEnv(t)() 71 72 links := []string{ 73 "/user5/repo4/projects", 74 "/user5/repo4/projects/3", 75 } 76 77 for _, link := range links { 78 req := NewRequest(t, "GET", link) 79 MakeRequest(t, req, http.StatusNotFound) 80 } 81 } 82 83 func testLinksAsUser(userName string, t *testing.T) { 84 links := []string{ 85 "/explore/repos", 86 "/explore/repos?q=test", 87 "/explore/users", 88 "/explore/users?q=test", 89 "/explore/organizations", 90 "/explore/organizations?q=test", 91 "/", 92 "/user/forgot_password", 93 "/api/swagger", 94 "/issues", 95 "/issues?type=your_repositories&repos=[0]&sort=&state=open", 96 "/issues?type=assigned&repos=[0]&sort=&state=open", 97 "/issues?type=your_repositories&repos=[0]&sort=&state=closed", 98 "/issues?type=assigned&repos=[]&sort=&state=closed", 99 "/issues?type=assigned&sort=&state=open", 100 "/issues?type=created_by&repos=[1,2]&sort=&state=closed", 101 "/issues?type=created_by&repos=[1,2]&sort=&state=open", 102 "/pulls", 103 "/pulls?type=your_repositories&repos=[2]&sort=&state=open", 104 "/pulls?type=assigned&repos=[]&sort=&state=open", 105 "/pulls?type=created_by&repos=[0]&sort=&state=open", 106 "/pulls?type=your_repositories&repos=[0]&sort=&state=closed", 107 "/pulls?type=assigned&repos=[0]&sort=&state=closed", 108 "/pulls?type=created_by&repos=[0]&sort=&state=closed", 109 "/milestones", 110 "/milestones?sort=mostcomplete&state=closed", 111 "/milestones?type=your_repositories&sort=mostcomplete&state=closed", 112 "/milestones?sort=&repos=[1]&state=closed", 113 "/milestones?sort=&repos=[1]&state=open", 114 "/milestones?repos=[0]&sort=mostissues&state=open", 115 "/notifications", 116 "/repo/create", 117 "/repo/migrate", 118 "/org/create", 119 "/user2", 120 "/user2?tab=stars", 121 "/user2?tab=activity", 122 "/user/settings", 123 "/user/settings/account", 124 "/user/settings/security", 125 "/user/settings/security/two_factor/enroll", 126 "/user/settings/keys", 127 "/user/settings/organization", 128 "/user/settings/repos", 129 } 130 131 session := loginUser(t, userName) 132 for _, link := range links { 133 req := NewRequest(t, "GET", link) 134 session.MakeRequest(t, req, http.StatusOK) 135 } 136 137 reqAPI := NewRequestf(t, "GET", "/api/v1/users/%s/repos", userName) 138 respAPI := MakeRequest(t, reqAPI, http.StatusOK) 139 140 var apiRepos []*api.Repository 141 DecodeJSON(t, respAPI, &apiRepos) 142 143 repoLinks := []string{ 144 "", 145 "/issues", 146 "/pulls", 147 "/commits/branch/master", 148 "/graph", 149 "/settings", 150 "/settings/collaboration", 151 "/settings/branches", 152 "/settings/hooks", 153 // FIXME: below links should return 200 but 404 ?? 154 //"/settings/hooks/git", 155 //"/settings/hooks/git/pre-receive", 156 //"/settings/hooks/git/update", 157 //"/settings/hooks/git/post-receive", 158 "/settings/keys", 159 "/releases", 160 "/releases/new", 161 //"/wiki/_pages", 162 "/wiki/?action=_new", 163 "/activity", 164 } 165 166 for _, repo := range apiRepos { 167 for _, link := range repoLinks { 168 req := NewRequest(t, "GET", fmt.Sprintf("/%s/%s%s", userName, repo.Name, link)) 169 session.MakeRequest(t, req, http.StatusOK) 170 } 171 } 172 } 173 174 func TestLinksLogin(t *testing.T) { 175 defer tests.PrepareTestEnv(t)() 176 177 testLinksAsUser("user2", t) 178 } 179 180 func TestRepoLinks(t *testing.T) { 181 defer tests.PrepareTestEnv(t)() 182 183 // repo1 has enabled almost features, so we can test most links 184 repoLink := "/user2/repo1" 185 links := []string{ 186 "/actions", 187 "/packages", 188 "/projects", 189 } 190 191 // anonymous user 192 for _, link := range links { 193 req := NewRequest(t, "GET", repoLink+link) 194 MakeRequest(t, req, http.StatusOK) 195 } 196 197 // admin/owner user 198 session := loginUser(t, "user1") 199 for _, link := range links { 200 req := NewRequest(t, "GET", repoLink+link) 201 session.MakeRequest(t, req, http.StatusOK) 202 } 203 204 // non-admin non-owner user 205 session = loginUser(t, "user2") 206 for _, link := range links { 207 req := NewRequest(t, "GET", repoLink+link) 208 session.MakeRequest(t, req, http.StatusOK) 209 } 210 }