2017-08-17 18:52:28 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integrations
import (
2017-08-23 12:53:35 +03:00
"fmt"
2017-08-17 18:52:28 +03:00
"net/http"
2017-11-03 01:01:22 +03:00
"path"
2017-08-17 18:52:28 +03:00
"testing"
2017-08-23 12:53:35 +03:00
2017-11-03 01:01:22 +03:00
"code.gitea.io/gitea/modules/setting"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2017-12-16 00:11:02 +03:00
"code.gitea.io/gitea/modules/test"
2017-10-30 05:04:25 +03:00
"github.com/stretchr/testify/assert"
2017-08-17 18:52:28 +03:00
)
func TestLinksNoLogin ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-08-17 18:52:28 +03:00
var links = [ ] string {
"/explore/repos" ,
"/explore/repos?q=test&tab=" ,
"/explore/users" ,
"/explore/users?q=test&tab=" ,
"/explore/organizations" ,
"/explore/organizations?q=test&tab=" ,
"/" ,
"/user/sign_up" ,
"/user/login" ,
"/user/forgot_password" ,
2017-10-21 17:05:50 +03:00
"/api/swagger" ,
"/api/v1/swagger" ,
2017-08-23 12:53:35 +03:00
// TODO: follow this page and test every link
2017-08-24 08:54:06 +03:00
"/vendor/librejs.html" ,
2017-08-17 18:52:28 +03:00
}
for _ , link := range links {
req := NewRequest ( t , "GET" , link )
MakeRequest ( t , req , http . StatusOK )
}
}
2017-08-23 12:53:35 +03:00
2017-10-30 05:04:25 +03:00
func TestRedirectsNoLogin ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-10-30 05:04:25 +03:00
var redirects = map [ string ] string {
2017-12-07 04:09:02 +03:00
"/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" ,
2017-10-30 05:04:25 +03:00
}
for link , redirectLink := range redirects {
req := NewRequest ( t , "GET" , link )
resp := MakeRequest ( t , req , http . StatusFound )
2017-12-16 00:11:02 +03:00
assert . EqualValues ( t , path . Join ( setting . AppSubURL , redirectLink ) , test . RedirectURL ( resp ) )
2017-10-30 05:04:25 +03:00
}
}
2017-08-23 12:53:35 +03:00
func testLinksAsUser ( userName string , t * testing . T ) {
var links = [ ] string {
"/explore/repos" ,
"/explore/repos?q=test&tab=" ,
"/explore/users" ,
"/explore/users?q=test&tab=" ,
"/explore/organizations" ,
"/explore/organizations?q=test&tab=" ,
"/" ,
"/user/forgot_password" ,
2017-10-21 17:05:50 +03:00
"/api/swagger" ,
"/api/v1/swagger" ,
2017-08-23 12:53:35 +03:00
"/issues" ,
2019-12-02 06:50:36 +03: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 12:53:35 +03:00
"/pulls" ,
2019-12-02 06:50:36 +03: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" ,
2017-08-23 12:53:35 +03:00
"/notifications" ,
"/repo/create" ,
"/repo/migrate" ,
"/org/create" ,
"/user2" ,
"/user2?tab=stars" ,
"/user2?tab=activity" ,
"/user/settings" ,
2018-05-15 13:07:32 +03:00
"/user/settings/account" ,
2017-10-16 12:14:12 +03:00
"/user/settings/security" ,
"/user/settings/security/two_factor/enroll" ,
2017-08-23 12:53:35 +03:00
"/user/settings/keys" ,
"/user/settings/organization" ,
2018-05-15 13:07:32 +03:00
"/user/settings/repos" ,
2017-08-23 12:53:35 +03: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 18:45:54 +03:00
var apiRepos [ ] * api . Repository
2017-08-23 12:53:35 +03:00
DecodeJSON ( t , respAPI , & apiRepos )
var repoLinks = [ ] string {
"" ,
"/issues" ,
"/pulls" ,
2017-10-30 05:04:25 +03:00
"/commits/branch/master" ,
2017-08-23 12:53:35 +03: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",
"/wiki/_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 ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-08-23 12:53:35 +03:00
testLinksAsUser ( "user2" , t )
}