2019-02-03 06:35:17 +03:00
// Copyright 2019 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 (
"net/http"
"testing"
2021-11-16 11:53:21 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-08-26 17:09:10 +03:00
api "code.gitea.io/gitea/modules/structs"
"github.com/stretchr/testify/assert"
2019-02-03 06:35:17 +03:00
)
2021-02-07 17:43:40 +03:00
func compareCommitFiles ( t * testing . T , expect [ ] string , files [ ] * api . CommitAffectedFiles ) {
var actual [ ] string
for i := range files {
actual = append ( actual , files [ i ] . Filename )
}
assert . ElementsMatch ( t , expect , actual )
}
2019-02-03 06:35:17 +03:00
func TestAPIReposGitCommits ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2019-02-03 06:35:17 +03:00
// Login as User2.
session := loginUser ( t , user . Name )
token := getTokenForLoggedInUser ( t , session )
2020-05-11 12:44:36 +03:00
// check invalid requests
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo1/git/commits/12345?token=" + token , user . Name )
2020-04-08 05:54:46 +03:00
session . MakeRequest ( t , req , http . StatusNotFound )
2020-05-11 12:44:36 +03:00
req = NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo1/git/commits/..?token=" + token , user . Name )
2020-04-08 05:54:46 +03:00
session . MakeRequest ( t , req , http . StatusUnprocessableEntity )
2020-05-11 12:44:36 +03:00
req = NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo1/git/commits/branch-not-exist?token=" + token , user . Name )
2020-04-08 05:54:46 +03:00
session . MakeRequest ( t , req , http . StatusNotFound )
2019-02-03 06:35:17 +03:00
for _ , ref := range [ ... ] string {
2020-04-08 05:54:46 +03:00
"master" , // Branch
"v1.1" , // Tag
"65f1" , // short sha
"65f1bf27bc3bf70f64657658635e66094edbcb4d" , // full sha
2019-02-03 06:35:17 +03:00
} {
2020-05-11 12:44:36 +03:00
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo1/git/commits/%s?token=" + token , user . Name , ref )
session . MakeRequest ( t , req , http . StatusOK )
2020-04-08 05:54:46 +03:00
}
2019-02-03 06:35:17 +03:00
}
2019-08-26 17:09:10 +03:00
func TestAPIReposGitCommitList ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2019-08-26 17:09:10 +03:00
// Login as User2.
session := loginUser ( t , user . Name )
token := getTokenForLoggedInUser ( t , session )
// Test getting commits (Page 1)
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo16/commits?token=" + token , user . Name )
resp := session . MakeRequest ( t , req , http . StatusOK )
var apiData [ ] api . Commit
DecodeJSON ( t , resp , & apiData )
2021-02-07 17:43:40 +03:00
assert . Len ( t , apiData , 3 )
assert . EqualValues ( t , "69554a64c1e6030f051e5c3f94bfbd773cd6a324" , apiData [ 0 ] . CommitMeta . SHA )
compareCommitFiles ( t , [ ] string { "readme.md" } , apiData [ 0 ] . Files )
assert . EqualValues ( t , "27566bd5738fc8b4e3fef3c5e72cce608537bd95" , apiData [ 1 ] . CommitMeta . SHA )
compareCommitFiles ( t , [ ] string { "readme.md" } , apiData [ 1 ] . Files )
assert . EqualValues ( t , "5099b81332712fe655e34e8dd63574f503f61811" , apiData [ 2 ] . CommitMeta . SHA )
compareCommitFiles ( t , [ ] string { "readme.md" } , apiData [ 2 ] . Files )
2019-08-26 17:09:10 +03:00
}
func TestAPIReposGitCommitListPage2Empty ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2019-08-26 17:09:10 +03:00
// Login as User2.
session := loginUser ( t , user . Name )
token := getTokenForLoggedInUser ( t , session )
// Test getting commits (Page=2)
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo16/commits?token=" + token + "&page=2" , user . Name )
resp := session . MakeRequest ( t , req , http . StatusOK )
var apiData [ ] api . Commit
DecodeJSON ( t , resp , & apiData )
2021-02-07 17:43:40 +03:00
assert . Len ( t , apiData , 0 )
2019-08-26 17:09:10 +03:00
}
func TestAPIReposGitCommitListDifferentBranch ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2019-08-26 17:09:10 +03:00
// Login as User2.
session := loginUser ( t , user . Name )
token := getTokenForLoggedInUser ( t , session )
// Test getting commits (Page=1, Branch=good-sign)
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo16/commits?token=" + token + "&sha=good-sign" , user . Name )
resp := session . MakeRequest ( t , req , http . StatusOK )
var apiData [ ] api . Commit
DecodeJSON ( t , resp , & apiData )
2021-02-07 17:43:40 +03:00
assert . Len ( t , apiData , 1 )
2019-08-26 17:09:10 +03:00
assert . Equal ( t , "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441" , apiData [ 0 ] . CommitMeta . SHA )
2021-02-07 17:43:40 +03:00
compareCommitFiles ( t , [ ] string { "readme.md" } , apiData [ 0 ] . Files )
2019-08-26 17:09:10 +03:00
}
2021-09-20 19:14:29 +03:00
func TestDownloadCommitDiffOrPatch ( t * testing . T ) {
defer prepareTestEnv ( t ) ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2021-09-20 19:14:29 +03:00
// Login as User2.
session := loginUser ( t , user . Name )
token := getTokenForLoggedInUser ( t , session )
// Test getting diff
reqDiff := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo16/git/commits/f27c2b2b03dcab38beaf89b0ab4ff61f6de63441.diff?token=" + token , user . Name )
resp := session . MakeRequest ( t , reqDiff , http . StatusOK )
assert . EqualValues ( t ,
"commit f27c2b2b03dcab38beaf89b0ab4ff61f6de63441\nAuthor: User2 <user2@example.com>\nDate: Sun Aug 6 19:55:01 2017 +0200\n\n good signed commit\n\ndiff --git a/readme.md b/readme.md\nnew file mode 100644\nindex 0000000..458121c\n--- /dev/null\n+++ b/readme.md\n@@ -0,0 +1 @@\n+good sign\n" ,
resp . Body . String ( ) )
// Test getting patch
reqPatch := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo16/git/commits/f27c2b2b03dcab38beaf89b0ab4ff61f6de63441.patch?token=" + token , user . Name )
resp = session . MakeRequest ( t , reqPatch , http . StatusOK )
assert . EqualValues ( t ,
"From f27c2b2b03dcab38beaf89b0ab4ff61f6de63441 Mon Sep 17 00:00:00 2001\nFrom: User2 <user2@example.com>\nDate: Sun, 6 Aug 2017 19:55:01 +0200\nSubject: [PATCH] good signed commit\n\n---\n readme.md | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 readme.md\n\ndiff --git a/readme.md b/readme.md\nnew file mode 100644\nindex 0000000..458121c\n--- /dev/null\n+++ b/readme.md\n@@ -0,0 +1 @@\n+good sign\n" ,
resp . Body . String ( ) )
}
2021-12-22 09:17:33 +03:00
func TestGetFileHistory ( t * testing . T ) {
defer prepareTestEnv ( t ) ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2021-12-22 09:17:33 +03:00
// Login as User2.
session := loginUser ( t , user . Name )
token := getTokenForLoggedInUser ( t , session )
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/repo16/commits?path=readme.md&token=" + token + "&sha=good-sign" , user . Name )
resp := session . MakeRequest ( t , req , http . StatusOK )
var apiData [ ] api . Commit
DecodeJSON ( t , resp , & apiData )
assert . Len ( t , apiData , 1 )
assert . Equal ( t , "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441" , apiData [ 0 ] . CommitMeta . SHA )
compareCommitFiles ( t , [ ] string { "readme.md" } , apiData [ 0 ] . Files )
}