2017-05-07 17:40:31 +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.
2022-09-02 22:18:23 +03:00
package integration
2017-05-07 17:40:31 +03:00
import (
"net/http"
2019-08-09 05:13:03 +03:00
"net/http/httptest"
2017-05-07 17:40:31 +03:00
"path"
"testing"
2021-07-24 19:03:58 +03:00
"code.gitea.io/gitea/modules/json"
2019-08-09 05:13:03 +03:00
"code.gitea.io/gitea/modules/setting"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2017-06-17 07:49:45 +03:00
2017-05-07 17:40:31 +03:00
"github.com/stretchr/testify/assert"
)
func TestRepoCommits ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-05-07 17:40:31 +03:00
2017-06-17 07:49:45 +03:00
session := loginUser ( t , "user2" )
2017-05-07 17:40:31 +03:00
// Request repository commits page
2017-10-30 05:04:25 +03:00
req := NewRequest ( t , "GET" , "/user2/repo1/commits/branch/master" )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-05-07 17:40:31 +03:00
2017-06-17 19:29:59 +03:00
doc := NewHTMLParser ( t , resp . Body )
2017-05-07 17:40:31 +03:00
commitURL , exists := doc . doc . Find ( "#commits-table tbody tr td.sha a" ) . Attr ( "href" )
assert . True ( t , exists )
assert . NotEmpty ( t , commitURL )
}
func doTestRepoCommitWithStatus ( t * testing . T , state string , classes ... string ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-05-07 17:40:31 +03:00
2017-06-17 07:49:45 +03:00
session := loginUser ( t , "user2" )
2017-05-07 17:40:31 +03:00
// Request repository commits page
2017-10-30 05:04:25 +03:00
req := NewRequest ( t , "GET" , "/user2/repo1/commits/branch/master" )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-05-07 17:40:31 +03:00
2017-06-17 19:29:59 +03:00
doc := NewHTMLParser ( t , resp . Body )
2017-05-07 17:40:31 +03:00
// Get first commit URL
commitURL , exists := doc . doc . Find ( "#commits-table tbody tr td.sha a" ) . Attr ( "href" )
assert . True ( t , exists )
assert . NotEmpty ( t , commitURL )
// Call API to add status for commit
2022-05-07 20:05:52 +03:00
t . Run ( "CreateStatus" , doAPICreateCommitStatus ( NewAPITestContext ( t , "user2" , "repo1" ) , path . Base ( commitURL ) , api . CommitStatusState ( state ) ) )
2017-05-07 17:40:31 +03:00
2017-10-30 05:04:25 +03:00
req = NewRequest ( t , "GET" , "/user2/repo1/commits/branch/master" )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
2017-05-07 17:40:31 +03:00
2017-06-17 19:29:59 +03:00
doc = NewHTMLParser ( t , resp . Body )
2017-05-07 17:40:31 +03:00
// Check if commit status is displayed in message column
2022-08-10 00:55:29 +03:00
sel := doc . doc . Find ( "#commits-table tbody tr td.message a.commit-statuses-trigger .commit-status" )
2021-06-07 08:27:09 +03:00
assert . Equal ( t , 1 , sel . Length ( ) )
2017-05-07 17:40:31 +03:00
for _ , class := range classes {
assert . True ( t , sel . HasClass ( class ) )
}
2019-08-09 05:13:03 +03:00
2022-01-20 20:46:10 +03:00
// By SHA
2019-08-09 05:13:03 +03:00
req = NewRequest ( t , "GET" , "/api/v1/repos/user2/repo1/commits/" + path . Base ( commitURL ) + "/statuses" )
2021-07-13 10:14:14 +03:00
reqOne := NewRequest ( t , "GET" , "/api/v1/repos/user2/repo1/commits/" + path . Base ( commitURL ) + "/status" )
testRepoCommitsWithStatus ( t , session . MakeRequest ( t , req , http . StatusOK ) , session . MakeRequest ( t , reqOne , http . StatusOK ) , state )
2022-01-20 20:46:10 +03:00
// By Ref
2019-08-09 05:13:03 +03:00
req = NewRequest ( t , "GET" , "/api/v1/repos/user2/repo1/commits/master/statuses" )
2021-07-13 10:14:14 +03:00
reqOne = NewRequest ( t , "GET" , "/api/v1/repos/user2/repo1/commits/master/status" )
testRepoCommitsWithStatus ( t , session . MakeRequest ( t , req , http . StatusOK ) , session . MakeRequest ( t , reqOne , http . StatusOK ) , state )
2019-08-09 05:13:03 +03:00
req = NewRequest ( t , "GET" , "/api/v1/repos/user2/repo1/commits/v1.1/statuses" )
2021-07-13 10:14:14 +03:00
reqOne = NewRequest ( t , "GET" , "/api/v1/repos/user2/repo1/commits/v1.1/status" )
testRepoCommitsWithStatus ( t , session . MakeRequest ( t , req , http . StatusOK ) , session . MakeRequest ( t , reqOne , http . StatusOK ) , state )
2019-08-09 05:13:03 +03:00
}
2021-07-13 10:14:14 +03:00
func testRepoCommitsWithStatus ( t * testing . T , resp , respOne * httptest . ResponseRecorder , state string ) {
var statuses [ ] * api . CommitStatus
assert . NoError ( t , json . Unmarshal ( resp . Body . Bytes ( ) , & statuses ) )
var status api . CombinedStatus
assert . NoError ( t , json . Unmarshal ( respOne . Body . Bytes ( ) , & status ) )
assert . NotNil ( t , status )
if assert . Len ( t , statuses , 1 ) {
assert . Equal ( t , api . CommitStatusState ( state ) , statuses [ 0 ] . State )
assert . Equal ( t , setting . AppURL + "api/v1/repos/user2/repo1/statuses/65f1bf27bc3bf70f64657658635e66094edbcb4d" , statuses [ 0 ] . URL )
assert . Equal ( t , "http://test.ci/" , statuses [ 0 ] . TargetURL )
assert . Equal ( t , "" , statuses [ 0 ] . Description )
assert . Equal ( t , "testci" , statuses [ 0 ] . Context )
assert . Len ( t , status . Statuses , 1 )
assert . Equal ( t , statuses [ 0 ] , status . Statuses [ 0 ] )
assert . Equal ( t , "65f1bf27bc3bf70f64657658635e66094edbcb4d" , status . SHA )
2019-08-09 05:13:03 +03:00
}
2017-05-07 17:40:31 +03:00
}
func TestRepoCommitsWithStatusPending ( t * testing . T ) {
2022-08-10 00:55:29 +03:00
doTestRepoCommitWithStatus ( t , "pending" , "octicon-dot-fill" , "yellow" )
2017-05-07 17:40:31 +03:00
}
func TestRepoCommitsWithStatusSuccess ( t * testing . T ) {
2022-08-10 00:55:29 +03:00
doTestRepoCommitWithStatus ( t , "success" , "octicon-check" , "green" )
2017-05-07 17:40:31 +03:00
}
func TestRepoCommitsWithStatusError ( t * testing . T ) {
2022-08-10 00:55:29 +03:00
doTestRepoCommitWithStatus ( t , "error" , "gitea-exclamation" , "red" )
2017-05-07 17:40:31 +03:00
}
func TestRepoCommitsWithStatusFailure ( t * testing . T ) {
2022-08-10 00:55:29 +03:00
doTestRepoCommitWithStatus ( t , "failure" , "octicon-x" , "red" )
2017-05-07 17:40:31 +03:00
}
func TestRepoCommitsWithStatusWarning ( t * testing . T ) {
2022-08-10 00:55:29 +03:00
doTestRepoCommitWithStatus ( t , "warning" , "gitea-exclamation" , "yellow" )
2017-05-07 17:40:31 +03:00
}