@@ -6,6 +6,13 @@ import { App } from '@slack/bolt';
66import { buildMockApp } from '@utils/slackMocks' ;
77import { reviewCloser } from '@/services/ReviewCloser' ;
88
9+ jest . mock ( '@/services/RequestService' , ( ) => ( {
10+ ...jest . requireActual ( '@/services/RequestService' ) ,
11+ expireRequest : jest . fn ( ) ,
12+ } ) ) ;
13+
14+ import { expireRequest } from '@/services/RequestService' ;
15+
916describe ( 'reviewCloser' , ( ) => {
1017 let app : App ;
1118 beforeEach ( ( ) => {
@@ -98,6 +105,45 @@ describe('reviewCloser', () => {
98105 expect ( chatService . replyToReviewThread ) . not . toHaveBeenCalled ( ) ;
99106 expect ( activeReviewRepo . remove ) . not . toHaveBeenCalled ( ) ;
100107 } ) ;
108+
109+ it ( 'should call expireRequest for all pending reviewers before closing the review' , async ( ) => {
110+ const threadId = '111' ;
111+ const requestorId = '123' ;
112+ const pendingReviewers = [
113+ { userId : '123' , expiresAt : 1 , messageTimestamp : '456' } ,
114+ { userId : '456' , expiresAt : 2 , messageTimestamp : '789' } ,
115+ ] ;
116+ const review : ActiveReview = {
117+ threadId : threadId ,
118+ requestorId : requestorId ,
119+ languages : [ 'Java' ] ,
120+ requestedAt : new Date ( ) ,
121+ dueBy : Deadline . MONDAY ,
122+ candidateIdentifier : 'some-id' ,
123+ reviewersNeededCount : 2 ,
124+ acceptedReviewers : [ acceptedUser ( 'A' ) , acceptedUser ( 'B' ) ] ,
125+ declinedReviewers : [ ] ,
126+ pendingReviewers : pendingReviewers ,
127+ pdfIdentifier : '' ,
128+ } ;
129+
130+ activeReviewRepo . getReviewByThreadIdOrFail = jest . fn ( ) . mockResolvedValue ( review ) ;
131+
132+ await reviewCloser . closeReviewIfComplete ( app , threadId ) ;
133+
134+ expect ( expireRequest ) . toHaveBeenCalledTimes ( pendingReviewers . length ) ;
135+ pendingReviewers . forEach ( pendingReviewer => {
136+ expect ( expireRequest ) . toHaveBeenCalledWith ( app , review , pendingReviewer . userId ) ;
137+ } ) ;
138+
139+ // Verify the review is closed after expiring requests
140+ expect ( chatService . replyToReviewThread ) . toHaveBeenCalledWith (
141+ app . client ,
142+ threadId ,
143+ `<@${ requestorId } > all 2 reviewers have been found!` ,
144+ ) ;
145+ expect ( activeReviewRepo . remove ) . toHaveBeenCalledWith ( threadId ) ;
146+ } ) ;
101147 } ) ;
102148} ) ;
103149
0 commit comments