@@ -243,7 +243,7 @@ describe('getApprovalStatus()', () => {
243
243
} ) ;
244
244
} ) ;
245
245
246
- describe ( 'getAutoUpdateCanidate ()' , ( ) => {
246
+ describe ( 'getAutoUpdateCandidate ()' , ( ) => {
247
247
const pullsList = require ( '../../test/fixtures/pulls_list.json' ) ;
248
248
const reviewsList = require ( '../../test/fixtures/list_reviews.json' ) ;
249
249
const prMetaData = require ( '../../test/fixtures/pr_metadata.json' ) ;
@@ -329,14 +329,43 @@ describe('getAutoUpdateCanidate()', () => {
329
329
expect ( mockedGet ) . toHaveBeenCalledTimes ( 0 ) ;
330
330
expect ( res ) . toBe ( null ) ;
331
331
} ) ;
332
+
333
+ test ( 'PR with approvals from a single users will not be selected' , async ( ) => {
334
+ // 2 approvals, but from the same user
335
+ const reviews = {
336
+ ...reviewsList ,
337
+ data : [
338
+ { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
339
+ { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
340
+ ] ,
341
+ } ;
342
+ const prList = [ { ...pullsList . data [ 0 ] , auto_merge : { } } ] ;
343
+ const mockedListReviews = jest . fn ( ) . mockResolvedValue ( reviews ) ;
344
+ const mockedGet = jest . fn ( ) ;
345
+
346
+ github . getOctokit . mockReturnValue ( {
347
+ pulls : { listReviews : mockedListReviews , get : mockedGet } ,
348
+ } ) ;
349
+
350
+ const res = await gitLib . getAutoUpdateCandidate ( prList ) ;
351
+ expect ( mockedListReviews ) . toHaveBeenCalled ( ) ;
352
+ expect ( utils . log ) . toHaveBeenCalledTimes ( 2 ) ;
353
+ expect ( utils . printFailReason ) . toHaveBeenCalledTimes ( 1 ) ;
354
+ expect ( utils . printFailReason ) . toHaveBeenCalledWith (
355
+ prList [ 0 ] . number ,
356
+ `approvalsCount: 1, requiredApprovalCount: ${ requiredApprovalCount } , changesRequestedReviews: 0` ,
357
+ ) ;
358
+ expect ( mockedGet ) . toHaveBeenCalledTimes ( 0 ) ;
359
+ expect ( res ) . toBe ( null ) ;
360
+ } ) ;
332
361
333
362
test ( 'PR with mergeable !== true will not be selected' , async ( ) => {
334
363
// has 2 approvals, not request for change review
335
364
const reviews = {
336
365
...reviewsList ,
337
366
data : [
338
367
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
339
- { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
368
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
340
369
] ,
341
370
} ;
342
371
const prData = {
@@ -369,7 +398,7 @@ describe('getAutoUpdateCanidate()', () => {
369
398
...reviewsList ,
370
399
data : [
371
400
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
372
- { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
401
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
373
402
] ,
374
403
} ;
375
404
// pr mergeable: true, merge_state: clean
@@ -397,13 +426,13 @@ describe('getAutoUpdateCanidate()', () => {
397
426
expect ( res ) . toBe ( null ) ;
398
427
} ) ;
399
428
400
- test ( 'PR with failed checks wonnt be selected' , async ( ) => {
429
+ test ( 'PR with failed checks wont be selected' , async ( ) => {
401
430
// has 2 approvals, no request for change review
402
431
const reviews = {
403
432
...reviewsList ,
404
433
data : [
405
434
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
406
- { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
435
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
407
436
] ,
408
437
} ;
409
438
// pr mergeable: true, merge_state: clean
@@ -452,7 +481,7 @@ describe('getAutoUpdateCanidate()', () => {
452
481
...reviewsList ,
453
482
data : [
454
483
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
455
- { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
484
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
456
485
] ,
457
486
} ;
458
487
// pr mergeable: true, merge_state: clean
@@ -489,13 +518,60 @@ describe('getAutoUpdateCanidate()', () => {
489
518
const res = await gitLib . getAutoUpdateCandidate ( prList ) ;
490
519
expect ( res ) . toBe ( prList [ 0 ] ) ;
491
520
} ) ;
521
+
522
+ test ( 'Should ignore trailing comment reviews' , async ( ) => {
523
+ // has approvals, and some reviews at the end
524
+ const reviews = {
525
+ ...reviewsList ,
526
+ data : [
527
+ { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
528
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
529
+ { ...reviewsList . data [ 0 ] , state : 'COMMENTED' } ,
530
+ { ...reviewsList . data [ 2 ] , state : 'COMMENTED' } ,
531
+ ] ,
532
+ } ;
533
+ // pr mergeable: true, merge_state: clean
534
+ const prData = {
535
+ data : {
536
+ ...prMetaData . data ,
537
+ ...{ mergeable : true , mergeable_state : 'behind' } ,
538
+ } ,
539
+ } ;
540
+
541
+ const check = checksList . data . check_runs [ 0 ] ;
542
+ const checks = {
543
+ ...checksList ,
544
+ data : {
545
+ total_count : 2 ,
546
+ check_runs : [
547
+ { ...check , conclusion : 'success' } ,
548
+ { ...check , conclusion : 'success' } ,
549
+ ] ,
550
+ } ,
551
+ } ;
552
+
553
+ // has auto-merge PR
554
+ const prList = [ { ...pullsList . data [ 0 ] , auto_merge : { } } ] ;
555
+ const mockedListReviews = jest . fn ( ) . mockResolvedValue ( reviews ) ;
556
+ const mockedGet = jest . fn ( ) . mockResolvedValue ( prData ) ;
557
+ const mockedListForRef = jest . fn ( ) . mockResolvedValue ( checks ) ;
558
+
559
+ github . getOctokit . mockReturnValue ( {
560
+ pulls : { listReviews : mockedListReviews , get : mockedGet } ,
561
+ checks : { listForRef : mockedListForRef } ,
562
+ } ) ;
563
+
564
+ const res = await gitLib . getAutoUpdateCandidate ( prList ) ;
565
+ expect ( res ) . toEqual ( prList [ 0 ] ) ;
566
+ } ) ;
567
+
492
568
test ( 'Should return the first PR if it is all good' , async ( ) => {
493
569
// has 2 approvals, no request for change review
494
570
const reviews = {
495
571
...reviewsList ,
496
572
data : [
497
573
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
498
- { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
574
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
499
575
] ,
500
576
} ;
501
577
// pr mergeable: true, merge_state: clean
@@ -541,14 +617,14 @@ describe('getAutoUpdateCanidate()', () => {
541
617
...reviewsList ,
542
618
data : [
543
619
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
544
- { ...reviewsList . data [ 0 ] , state : 'CHANGES_REQUESTED' } ,
620
+ { ...reviewsList . data [ 1 ] , state : 'CHANGES_REQUESTED' } ,
545
621
] ,
546
622
} ;
547
623
const reviewsSecond = {
548
624
...reviewsList ,
549
625
data : [
550
626
{ ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
551
- { ...reviewsList . data [ 0 ] , state : 'APPROVED' } ,
627
+ { ...reviewsList . data [ 1 ] , state : 'APPROVED' } ,
552
628
] ,
553
629
} ;
554
630
// pr mergeable: true, merge_state: clean
0 commit comments