@@ -6,9 +6,12 @@ import munit.FunSuite
6
6
import org .http4s .syntax .literals ._
7
7
import org .scalasteward .core .application .Cli .EnvVar
8
8
import org .scalasteward .core .application .Cli .ParseResult ._
9
- import org .scalasteward .core .application .Config .StewardUsage
9
+ import org .scalasteward .core .application .Config .{ MergeRequestApprovalRulesCfg , StewardUsage }
10
10
import org .scalasteward .core .forge .ForgeType
11
11
import org .scalasteward .core .forge .github .GitHubApp
12
+ import org .scalasteward .core .util .Nel
13
+ import cats .syntax .either ._
14
+
12
15
import scala .concurrent .duration ._
13
16
14
17
class CliTest extends FunSuite {
@@ -63,7 +66,7 @@ class CliTest extends FunSuite {
63
66
assertEquals(obtained.githubApp, Some (GitHubApp (12345678L , File (" example_app_key" ))))
64
67
assertEquals(obtained.refreshBackoffPeriod, 1 .day)
65
68
assert(! obtained.gitLabCfg.mergeWhenPipelineSucceeds)
66
- assertEquals(obtained.gitLabCfg.requiredReviewers , None )
69
+ assertEquals(obtained.gitLabCfg.requiredApprovals , None )
67
70
assert(obtained.bitbucketCfg.useDefaultReviewers)
68
71
assert(! obtained.bitbucketServerCfg.useDefaultReviewers)
69
72
}
@@ -151,27 +154,84 @@ class CliTest extends FunSuite {
151
154
assert(clue(obtained).startsWith(" Usage" ))
152
155
}
153
156
154
- test(" parseArgs: non-default GitLab arguments" ) {
157
+ test(" parseArgs: non-default GitLab arguments and required reviewers " ) {
155
158
val params = minimumRequiredParams ++ List (
156
159
List (" --gitlab-merge-when-pipeline-succeeds" ),
157
160
List (" --gitlab-required-reviewers" , " 5" )
158
161
)
159
162
val Success (StewardUsage .Regular (obtained)) = Cli .parseArgs(params.flatten)
160
163
161
164
assert(obtained.gitLabCfg.mergeWhenPipelineSucceeds)
162
- assertEquals(obtained.gitLabCfg.requiredReviewers , Some (5 ))
165
+ assertEquals(obtained.gitLabCfg.requiredApprovals , Some (5 .asLeft ))
163
166
}
164
167
165
- test(" parseArgs: invalid GitLab required reviewers " ) {
168
+ test(" parseArgs: non-default GitLab arguments and merge request level approval rule " ) {
166
169
val params = minimumRequiredParams ++ List (
167
170
List (" --gitlab-merge-when-pipeline-succeeds" ),
171
+ List (" --merge-request-level-approval-rule" , " All eligible users:0" )
172
+ )
173
+ val Success (StewardUsage .Regular (obtained)) = Cli .parseArgs(params.flatten)
174
+
175
+ assert(obtained.gitLabCfg.mergeWhenPipelineSucceeds)
176
+ assertEquals(
177
+ obtained.gitLabCfg.requiredApprovals,
178
+ Some (Nel .one(MergeRequestApprovalRulesCfg (" All eligible users" , 0 )).asRight)
179
+ )
180
+ }
181
+
182
+ test(" parseArgs: multiple Gitlab merge request level approval rule" ) {
183
+ val params = minimumRequiredParams ++ List (
184
+ List (" --merge-request-level-approval-rule" , " All eligible users:1" ),
185
+ List (" --merge-request-level-approval-rule" , " Only Main:2" )
186
+ )
187
+ val Success (StewardUsage .Regular (obtained)) = Cli .parseArgs(params.flatten)
188
+
189
+ assertEquals(
190
+ obtained.gitLabCfg.requiredApprovals,
191
+ Some (
192
+ Nel
193
+ .of(
194
+ MergeRequestApprovalRulesCfg (" All eligible users" , 1 ),
195
+ MergeRequestApprovalRulesCfg (" Only Main" , 2 )
196
+ )
197
+ .asRight
198
+ )
199
+ )
200
+ }
201
+
202
+ test(" parseArgs: only allow one way to define Gitlab required approvals arguments" ) {
203
+ val params = minimumRequiredParams ++ List (
204
+ List (" --merge-request-level-approval-rule" , " All eligible users:0" ),
205
+ List (" --gitlab-required-reviewers" , " 5" )
206
+ )
207
+ val Error (errorMsg) = Cli .parseArgs(params.flatten)
208
+
209
+ assert(
210
+ clue(errorMsg).startsWith(
211
+ " You can't use both --gitlabRequiredReviewers and --merge-request-level-approval-rule at the same time"
212
+ )
213
+ )
214
+
215
+ }
216
+
217
+ test(" parseArgs: invalid GitLab required reviewers" ) {
218
+ val params = minimumRequiredParams ++ List (
168
219
List (" --gitlab-required-reviewers" , " -3" )
169
220
)
170
221
val Error (errorMsg) = Cli .parseArgs(params.flatten)
171
222
172
223
assert(clue(errorMsg).startsWith(" Required reviewers must be non-negative" ))
173
224
}
174
225
226
+ test(" parseArgs: invalid GitLab merge request level approval rule" ) {
227
+ val params = minimumRequiredParams ++ List (
228
+ List (" --merge-request-level-approval-rule" , " All eligible users:-3" )
229
+ )
230
+ val Error (errorMsg) = Cli .parseArgs(params.flatten)
231
+
232
+ assert(clue(errorMsg).startsWith(" Merge request level required approvals must be non-negative" ))
233
+ }
234
+
175
235
test(" parseArgs: validate-repo-config" ) {
176
236
val Success (StewardUsage .ValidateRepoConfig (file)) = Cli .parseArgs(
177
237
List (
0 commit comments