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"
2020-02-01 22:11:32 +03:00
"path"
2018-05-01 10:04:36 +03:00
"strings"
2017-04-25 10:24:51 +03:00
"testing"
2020-02-01 22:11:32 +03:00
"time"
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 ) {
2019-11-26 02:21:37 +03:00
defer 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
}
2020-02-01 22:11:32 +03:00
func testViewRepo ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-06-15 05:50:12 +03:00
req := NewRequest ( t , "GET" , "/user3/repo3" )
2017-06-17 07:49:45 +03:00
session := loginUser ( t , "user2" )
2020-02-01 22:11:32 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
files := htmlDoc . doc . Find ( "#repo-files-table > TBODY > TR" )
type file struct {
fileName string
commitID string
commitMsg string
commitTime string
}
var items [ ] file
files . Each ( func ( i int , s * goquery . Selection ) {
tds := s . Find ( "td" )
var f file
tds . Each ( func ( i int , s * goquery . Selection ) {
if i == 0 {
f . fileName = strings . TrimSpace ( s . Text ( ) )
} else if i == 1 {
a := s . Find ( "a" )
f . commitMsg = strings . TrimSpace ( a . Text ( ) )
l , _ := a . Attr ( "href" )
f . commitID = path . Base ( l )
}
} )
f . commitTime , _ = s . Find ( "span.time-since" ) . Attr ( "title" )
items = append ( items , f )
} )
2020-02-25 06:05:00 +03:00
commitT := time . Date ( 2017 , time . June , 14 , 13 , 54 , 21 , 0 , time . UTC ) . In ( time . Local ) . Format ( time . RFC1123 )
2020-02-01 22:11:32 +03:00
assert . EqualValues ( t , [ ] file {
{
fileName : "doc" ,
commitID : "2a47ca4b614a9f5a43abbd5ad851a54a616ffee6" ,
commitMsg : "init project" ,
2020-02-25 06:05:00 +03:00
commitTime : commitT ,
2020-02-01 22:11:32 +03:00
} ,
{
fileName : "README.md" ,
commitID : "2a47ca4b614a9f5a43abbd5ad851a54a616ffee6" ,
commitMsg : "init project" ,
2020-02-25 06:05:00 +03:00
commitTime : commitT ,
2020-02-01 22:11:32 +03:00
} ,
} , items )
}
func TestViewRepo2 ( t * testing . T ) {
// no last commit cache
testViewRepo ( t )
// enable last commit cache for all repositories
oldCommitsCount := setting . CacheService . LastCommit . CommitsCount
setting . CacheService . LastCommit . CommitsCount = 0
// first view will not hit the cache
testViewRepo ( t )
// second view will hit the cache
testViewRepo ( t )
setting . CacheService . LastCommit . CommitsCount = oldCommitsCount
2017-06-15 05:50:12 +03:00
}
func TestViewRepo3 ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-06-15 05:50:12 +03:00
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 ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-07-15 17:21:51 +03:00
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 ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-07-15 17:21:51 +03:00
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 ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2018-05-01 10:04:36 +03:00
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 {
2020-02-11 20:02:41 +03:00
cls , _ := s . Find ( "SVG" ) . Attr ( "class" )
2018-05-01 10:04:36 +03:00
file := strings . Trim ( s . Find ( "A" ) . Text ( ) , " \t\n" )
return fmt . Sprintf ( "%s: %s" , file , cls )
} )
assert . Equal ( t , len ( items ) , 5 )
2020-02-11 20:02:41 +03:00
assert . Equal ( t , items [ 0 ] , "a: svg octicon-file-directory" )
assert . Equal ( t , items [ 1 ] , "link_b: svg octicon-file-symlink-directory" )
assert . Equal ( t , items [ 2 ] , "link_d: svg octicon-file-symlink-file" )
assert . Equal ( t , items [ 3 ] , "link_hi: svg octicon-file-symlink-file" )
assert . Equal ( t , items [ 4 ] , "link_link: svg octicon-file-symlink-file" )
2018-05-01 10:04:36 +03:00
}
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
} {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2019-01-28 00:13:15 +03:00
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" ) )
}
}