2017-04-25 10:24:51 +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-07-15 17:21:51 +03:00
"fmt"
2017-04-25 10:24:51 +03:00
"net/http"
2018-05-01 10:04:36 +03:00
"strings"
2017-04-25 10:24:51 +03:00
"testing"
2017-07-15 17:21:51 +03:00
"code.gitea.io/gitea/modules/setting"
2018-05-01 10:04:36 +03:00
"github.com/PuerkitoBio/goquery"
2017-07-15 17:21:51 +03:00
"github.com/stretchr/testify/assert"
2017-04-25 10:24:51 +03:00
)
func TestViewRepo ( t * testing . T ) {
2017-04-28 16:23:28 +03:00
prepareTestEnv ( t )
2017-04-25 10:24:51 +03:00
2017-06-10 03:41:36 +03:00
req := NewRequest ( t , "GET" , "/user2/repo1" )
2017-07-07 22:36:47 +03:00
MakeRequest ( t , req , http . StatusOK )
2017-06-15 05:50:12 +03:00
req = NewRequest ( t , "GET" , "/user3/repo3" )
2017-07-07 22:36:47 +03:00
MakeRequest ( t , req , http . StatusNotFound )
2017-06-15 05:50:12 +03:00
2017-06-17 07:49:45 +03:00
session := loginUser ( t , "user1" )
2017-07-07 22:36:47 +03:00
session . MakeRequest ( t , req , http . StatusNotFound )
2017-06-15 05:50:12 +03:00
}
func TestViewRepo2 ( t * testing . T ) {
prepareTestEnv ( t )
req := NewRequest ( t , "GET" , "/user3/repo3" )
2017-06-17 07:49:45 +03:00
session := loginUser ( t , "user2" )
2017-07-07 22:36:47 +03:00
session . MakeRequest ( t , req , http . StatusOK )
2017-06-15 05:50:12 +03:00
}
func TestViewRepo3 ( t * testing . T ) {
prepareTestEnv ( t )
req := NewRequest ( t , "GET" , "/user3/repo3" )
2017-07-17 05:04:43 +03:00
session := loginUser ( t , "user4" )
2017-07-07 22:36:47 +03:00
session . MakeRequest ( t , req , http . StatusOK )
2017-04-25 10:24:51 +03:00
}
2017-07-15 17:21:51 +03:00
func TestViewRepo1CloneLinkAnonymous ( t * testing . T ) {
prepareTestEnv ( t )
req := NewRequest ( t , "GET" , "/user2/repo1" )
resp := MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
link , exists := htmlDoc . doc . Find ( "#repo-clone-https" ) . Attr ( "data-link" )
assert . True ( t , exists , "The template has changed" )
assert . Equal ( t , setting . AppURL + "user2/repo1.git" , link )
_ , exists = htmlDoc . doc . Find ( "#repo-clone-ssh" ) . Attr ( "data-link" )
assert . False ( t , exists )
}
func TestViewRepo1CloneLinkAuthorized ( t * testing . T ) {
prepareTestEnv ( t )
session := loginUser ( t , "user2" )
req := NewRequest ( t , "GET" , "/user2/repo1" )
resp := session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
link , exists := htmlDoc . doc . Find ( "#repo-clone-https" ) . Attr ( "data-link" )
assert . True ( t , exists , "The template has changed" )
assert . Equal ( t , setting . AppURL + "user2/repo1.git" , link )
link , exists = htmlDoc . doc . Find ( "#repo-clone-ssh" ) . Attr ( "data-link" )
assert . True ( t , exists , "The template has changed" )
2019-07-07 04:28:09 +03:00
sshURL := fmt . Sprintf ( "ssh://%s@%s:%d/user2/repo1.git" , setting . SSH . BuiltinServerUser , setting . SSH . Domain , setting . SSH . Port )
2017-07-15 17:21:51 +03:00
assert . Equal ( t , sshURL , link )
}
2018-05-01 10:04:36 +03:00
func TestViewRepoWithSymlinks ( t * testing . T ) {
prepareTestEnv ( t )
session := loginUser ( t , "user2" )
req := NewRequest ( t , "GET" , "/user2/repo20.git" )
resp := session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
2019-05-06 21:43:40 +03:00
files := htmlDoc . doc . Find ( "#repo-files-table > TBODY > TR > TD.name > SPAN" )
2018-05-01 10:04:36 +03:00
items := files . Map ( func ( i int , s * goquery . Selection ) string {
cls , _ := s . Find ( "SPAN" ) . Attr ( "class" )
file := strings . Trim ( s . Find ( "A" ) . Text ( ) , " \t\n" )
return fmt . Sprintf ( "%s: %s" , file , cls )
} )
assert . Equal ( t , len ( items ) , 5 )
assert . Equal ( t , items [ 0 ] , "a: octicon octicon-file-directory" )
assert . Equal ( t , items [ 1 ] , "link_b: octicon octicon-file-symlink-directory" )
assert . Equal ( t , items [ 2 ] , "link_d: octicon octicon-file-symlink-file" )
assert . Equal ( t , items [ 3 ] , "link_hi: octicon octicon-file-symlink-file" )
assert . Equal ( t , items [ 4 ] , "link_link: octicon octicon-file-symlink-file" )
}
2019-01-28 00:13:15 +03:00
// TestViewAsRepoAdmin tests PR #2167
func TestViewAsRepoAdmin ( t * testing . T ) {
for user , expectedNoDescription := range map [ string ] bool {
"user2" : true ,
2019-02-19 10:19:28 +03:00
"user4" : false ,
2019-01-28 00:13:15 +03:00
} {
prepareTestEnv ( t )
session := loginUser ( t , user )
req := NewRequest ( t , "GET" , "/user2/repo1.git" )
resp := session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
noDescription := htmlDoc . doc . Find ( "#repo-desc" ) . Children ( )
assert . Equal ( t , expectedNoDescription , noDescription . HasClass ( "no-description" ) )
}
}