2017-04-21 14:32:31 +03:00
// Copyright 2017 Gitea. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-04-21 14:32:31 +03:00
2022-06-12 18:51:54 +03:00
package git_test
2017-04-21 14:32:31 +03:00
import (
2024-07-28 18:11:40 +03:00
"fmt"
2017-04-21 14:32:31 +03:00
"testing"
2024-04-30 06:53:16 +03:00
"time"
2017-04-21 14:32:31 +03:00
2024-07-28 18:11:40 +03:00
actions_model "code.gitea.io/gitea/models/actions"
2021-09-19 14:49:59 +03:00
"code.gitea.io/gitea/models/db"
2022-06-12 18:51:54 +03:00
git_model "code.gitea.io/gitea/models/git"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2024-04-30 06:53:16 +03:00
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/gitrepo"
2020-01-22 06:46:04 +03:00
"code.gitea.io/gitea/modules/structs"
2021-11-17 15:34:35 +03:00
2017-04-21 14:32:31 +03:00
"github.com/stretchr/testify/assert"
)
func TestGetCommitStatuses ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-04-21 14:32:31 +03:00
2022-08-16 05:22:25 +03:00
repo1 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } )
2017-04-21 14:32:31 +03:00
sha1 := "1234123412341234123412341234123412341234"
2024-01-15 17:07:32 +03:00
statuses , maxResults , err := db . FindAndCount [ git_model . CommitStatus ] ( db . DefaultContext , & git_model . CommitStatusOptions {
ListOptions : db . ListOptions { Page : 1 , PageSize : 50 } ,
RepoID : repo1 . ID ,
SHA : sha1 ,
} )
2017-04-21 14:32:31 +03:00
assert . NoError ( t , err )
2019-07-25 13:55:06 +03:00
assert . Equal ( t , int ( maxResults ) , 5 )
2019-08-09 05:13:03 +03:00
assert . Len ( t , statuses , 5 )
2017-04-21 14:32:31 +03:00
2019-08-09 05:13:03 +03:00
assert . Equal ( t , "ci/awesomeness" , statuses [ 0 ] . Context )
2020-01-22 06:46:04 +03:00
assert . Equal ( t , structs . CommitStatusPending , statuses [ 0 ] . State )
2023-01-09 06:50:54 +03:00
assert . Equal ( t , "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234" , statuses [ 0 ] . APIURL ( db . DefaultContext ) )
2017-04-21 14:32:31 +03:00
2023-10-09 01:16:06 +03:00
assert . Equal ( t , "cov/awesomeness" , statuses [ 1 ] . Context )
assert . Equal ( t , structs . CommitStatusWarning , statuses [ 1 ] . State )
assert . Equal ( t , "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234" , statuses [ 1 ] . APIURL ( db . DefaultContext ) )
2019-08-09 05:13:03 +03:00
assert . Equal ( t , "cov/awesomeness" , statuses [ 2 ] . Context )
2020-01-22 06:46:04 +03:00
assert . Equal ( t , structs . CommitStatusSuccess , statuses [ 2 ] . State )
2023-01-09 06:50:54 +03:00
assert . Equal ( t , "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234" , statuses [ 2 ] . APIURL ( db . DefaultContext ) )
2017-04-21 14:32:31 +03:00
2019-08-09 05:13:03 +03:00
assert . Equal ( t , "ci/awesomeness" , statuses [ 3 ] . Context )
2020-01-22 06:46:04 +03:00
assert . Equal ( t , structs . CommitStatusFailure , statuses [ 3 ] . State )
2023-01-09 06:50:54 +03:00
assert . Equal ( t , "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234" , statuses [ 3 ] . APIURL ( db . DefaultContext ) )
2019-08-09 05:13:03 +03:00
assert . Equal ( t , "deploy/awesomeness" , statuses [ 4 ] . Context )
2020-01-22 06:46:04 +03:00
assert . Equal ( t , structs . CommitStatusError , statuses [ 4 ] . State )
2023-01-09 06:50:54 +03:00
assert . Equal ( t , "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234" , statuses [ 4 ] . APIURL ( db . DefaultContext ) )
2024-01-15 17:07:32 +03:00
statuses , maxResults , err = db . FindAndCount [ git_model . CommitStatus ] ( db . DefaultContext , & git_model . CommitStatusOptions {
ListOptions : db . ListOptions { Page : 2 , PageSize : 50 } ,
RepoID : repo1 . ID ,
SHA : sha1 ,
} )
assert . NoError ( t , err )
assert . Equal ( t , int ( maxResults ) , 5 )
assert . Empty ( t , statuses )
2017-04-21 14:32:31 +03:00
}
2024-01-17 16:27:59 +03:00
func Test_CalcCommitStatus ( t * testing . T ) {
kases := [ ] struct {
statuses [ ] * git_model . CommitStatus
expected * git_model . CommitStatus
} {
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusPending ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusPending ,
} ,
} ,
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusSuccess ,
} ,
{
State : structs . CommitStatusPending ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusPending ,
} ,
} ,
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusSuccess ,
} ,
{
State : structs . CommitStatusPending ,
} ,
{
State : structs . CommitStatusSuccess ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusPending ,
} ,
} ,
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusError ,
} ,
{
State : structs . CommitStatusPending ,
} ,
{
State : structs . CommitStatusSuccess ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusError ,
} ,
} ,
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusWarning ,
} ,
{
State : structs . CommitStatusPending ,
} ,
{
State : structs . CommitStatusSuccess ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusWarning ,
} ,
} ,
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusSuccess ,
} ,
{
State : structs . CommitStatusSuccess ,
} ,
{
State : structs . CommitStatusSuccess ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusSuccess ,
} ,
} ,
{
statuses : [ ] * git_model . CommitStatus {
{
State : structs . CommitStatusFailure ,
} ,
{
State : structs . CommitStatusError ,
} ,
{
State : structs . CommitStatusWarning ,
} ,
} ,
expected : & git_model . CommitStatus {
State : structs . CommitStatusError ,
} ,
} ,
}
for _ , kase := range kases {
assert . Equal ( t , kase . expected , git_model . CalcCommitStatus ( kase . statuses ) )
}
}
2024-04-30 06:53:16 +03:00
func TestFindRepoRecentCommitStatusContexts ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
repo2 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 2 } )
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
gitRepo , err := gitrepo . OpenRepository ( git . DefaultContext , repo2 )
assert . NoError ( t , err )
defer gitRepo . Close ( )
commit , err := gitRepo . GetBranchCommit ( repo2 . DefaultBranch )
assert . NoError ( t , err )
defer func ( ) {
_ , err := db . DeleteByBean ( db . DefaultContext , & git_model . CommitStatus {
RepoID : repo2 . ID ,
CreatorID : user2 . ID ,
SHA : commit . ID . String ( ) ,
} )
assert . NoError ( t , err )
} ( )
err = git_model . NewCommitStatus ( db . DefaultContext , git_model . NewCommitStatusOptions {
Repo : repo2 ,
Creator : user2 ,
SHA : commit . ID ,
CommitStatus : & git_model . CommitStatus {
State : structs . CommitStatusFailure ,
TargetURL : "https://example.com/tests/" ,
Context : "compliance/lint-backend" ,
} ,
} )
assert . NoError ( t , err )
err = git_model . NewCommitStatus ( db . DefaultContext , git_model . NewCommitStatusOptions {
Repo : repo2 ,
Creator : user2 ,
SHA : commit . ID ,
CommitStatus : & git_model . CommitStatus {
State : structs . CommitStatusSuccess ,
TargetURL : "https://example.com/tests/" ,
Context : "compliance/lint-backend" ,
} ,
} )
assert . NoError ( t , err )
contexts , err := git_model . FindRepoRecentCommitStatusContexts ( db . DefaultContext , repo2 . ID , time . Hour )
assert . NoError ( t , err )
if assert . Len ( t , contexts , 1 ) {
assert . Equal ( t , "compliance/lint-backend" , contexts [ 0 ] )
}
}
2024-07-28 18:11:40 +03:00
func TestCommitStatusesHideActionsURL ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 4 } )
run := unittest . AssertExistsAndLoadBean ( t , & actions_model . ActionRun { ID : 791 , RepoID : repo . ID } )
assert . NoError ( t , run . LoadAttributes ( db . DefaultContext ) )
statuses := [ ] * git_model . CommitStatus {
{
RepoID : repo . ID ,
TargetURL : fmt . Sprintf ( "%s/jobs/%d" , run . Link ( ) , run . Index ) ,
} ,
{
RepoID : repo . ID ,
TargetURL : "https://mycicd.org/1" ,
} ,
}
git_model . CommitStatusesHideActionsURL ( db . DefaultContext , statuses )
assert . Empty ( t , statuses [ 0 ] . TargetURL )
assert . Equal ( t , "https://mycicd.org/1" , statuses [ 1 ] . TargetURL )
}