1- // Copyright 2019 The Gitea Authors.
2- // All rights reserved.
1+ // Copyright 2019 The Gitea Authors. All rights reserved.
32// SPDX-License-Identifier: MIT
43
54package pull
@@ -11,11 +10,18 @@ import (
1110
1211 "code.gitea.io/gitea/models/db"
1312 issues_model "code.gitea.io/gitea/models/issues"
13+ "code.gitea.io/gitea/models/pull"
14+ repo_model "code.gitea.io/gitea/models/repo"
1415 "code.gitea.io/gitea/models/unittest"
16+ user_model "code.gitea.io/gitea/models/user"
17+ "code.gitea.io/gitea/modules/graceful"
1518 "code.gitea.io/gitea/modules/queue"
1619 "code.gitea.io/gitea/modules/setting"
20+ "code.gitea.io/gitea/modules/test"
21+ "code.gitea.io/gitea/services/automergequeue"
1722
1823 "github.com/stretchr/testify/assert"
24+ "github.com/stretchr/testify/require"
1925)
2026
2127func TestPullRequest_AddToTaskQueue (t * testing.T ) {
@@ -63,6 +69,46 @@ func TestPullRequest_AddToTaskQueue(t *testing.T) {
6369 pr = unittest .AssertExistsAndLoadBean (t , & issues_model.PullRequest {ID : 2 })
6470 assert .Equal (t , issues_model .PullRequestStatusChecking , pr .Status )
6571
66- prPatchCheckerQueue .ShutdownWait (5 * time .Second )
72+ prPatchCheckerQueue .ShutdownWait (time .Second )
6773 prPatchCheckerQueue = nil
6874}
75+
76+ func TestMarkPullRequestAsMergeable (t * testing.T ) {
77+ assert .NoError (t , unittest .PrepareTestDatabase ())
78+
79+ prPatchCheckerQueue = queue .CreateUniqueQueue (graceful .GetManager ().ShutdownContext (), "pr_patch_checker" , func (items ... string ) []string { return nil })
80+ go prPatchCheckerQueue .Run ()
81+ defer func () {
82+ prPatchCheckerQueue .ShutdownWait (time .Second )
83+ prPatchCheckerQueue = nil
84+ }()
85+
86+ addToQueueShaChan := make (chan string , 1 )
87+ defer test .MockVariableValue (& automergequeue .AddToQueue , func (pr * issues_model.PullRequest , sha string ) {
88+ addToQueueShaChan <- sha
89+ })()
90+ ctx := t .Context ()
91+ _ , _ = db .GetEngine (ctx ).ID (2 ).Update (& issues_model.PullRequest {Status : issues_model .PullRequestStatusChecking })
92+ pr := unittest .AssertExistsAndLoadBean (t , & issues_model.PullRequest {ID : 2 })
93+ require .False (t , pr .HasMerged )
94+ require .Equal (t , issues_model .PullRequestStatusChecking , pr .Status )
95+
96+ err := pull .ScheduleAutoMerge (ctx , & user_model.User {ID : 99999 }, pr .ID , repo_model .MergeStyleMerge , "test msg" , true )
97+ require .NoError (t , err )
98+
99+ exist , scheduleMerge , err := pull .GetScheduledMergeByPullID (ctx , pr .ID )
100+ require .NoError (t , err )
101+ assert .True (t , exist )
102+ assert .True (t , scheduleMerge .Doer .IsGhost ())
103+
104+ markPullRequestAsMergeable (ctx , pr )
105+ pr = unittest .AssertExistsAndLoadBean (t , & issues_model.PullRequest {ID : 2 })
106+ require .Equal (t , issues_model .PullRequestStatusMergeable , pr .Status )
107+
108+ select {
109+ case sha := <- addToQueueShaChan :
110+ assert .Equal (t , "985f0301dba5e7b34be866819cd15ad3d8f508ee" , sha ) // ref: refs/pull/3/head
111+ case <- time .After (1 * time .Second ):
112+ assert .FailNow (t , "Timeout: nothing was added to automergequeue" )
113+ }
114+ }
0 commit comments