@@ -62,6 +62,7 @@ describe('api review', () => {
6262 removeLabel : vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ,
6363 listLabelsOnIssue : vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ,
6464 listComments : vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ,
65+ listEventsForTimeline : vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ,
6566 } ,
6667 checks : {
6768 listForRef : vi . fn ( ) . mockReturnValue ( { data : { check_runs : [ ] } } ) ,
@@ -108,9 +109,11 @@ describe('api review', () => {
108109 // Set created_at to yesterday.
109110 pull_request . created_at = new Date ( + new Date ( ) - 1000 * 60 * 60 * 24 * 2 ) ;
110111
112+ moctokit . rest . issues . listEventsForTimeline = vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ;
113+
111114 const expectedTime = pull_request . created_at . getTime ( ) + MINIMUM_MINOR_OPEN_TIME ;
112115 const expectedDate = new Date ( expectedTime ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
113- const readyDate = getPRReadyDate ( pull_request ) ;
116+ const readyDate = await getPRReadyDate ( moctokit , pull_request ) ;
114117
115118 expect ( readyDate ) . toEqual ( expectedDate ) ;
116119 } ) ;
@@ -121,9 +124,11 @@ describe('api review', () => {
121124 // Set created_at to yesterday.
122125 payload . created_at = new Date ( + new Date ( ) - 1000 * 60 * 60 * 24 * 2 ) ;
123126
127+ moctokit . rest . issues . listEventsForTimeline = vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ;
128+
124129 const expectedTime = payload . created_at . getTime ( ) + MINIMUM_PATCH_OPEN_TIME ;
125130 const expectedDate = new Date ( expectedTime ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
126- const readyDate = getPRReadyDate ( payload ) ;
131+ const readyDate = await getPRReadyDate ( moctokit , payload ) ;
127132
128133 expect ( readyDate ) . toEqual ( expectedDate ) ;
129134 } ) ;
@@ -134,8 +139,33 @@ describe('api review', () => {
134139 // Set created_at to yesterday.
135140 payload . created_at = new Date ( + new Date ( ) - 1000 * 60 * 60 * 24 * 2 ) ;
136141
142+ moctokit . rest . issues . listEventsForTimeline = vi . fn ( ) . mockReturnValue ( { data : [ ] } ) ;
143+
137144 const expectedDate = payload . created_at . toISOString ( ) . split ( 'T' ) [ 0 ] ;
138- const readyDate = getPRReadyDate ( payload ) ;
145+ const readyDate = await getPRReadyDate ( moctokit , payload ) ;
146+
147+ expect ( readyDate ) . toEqual ( expectedDate ) ;
148+ } ) ;
149+
150+ it ( 'correctly returns PR ready date based on ready_for_review event when PR was a draft' , async ( ) => {
151+ const { pull_request } = loadFixture ( 'api-review-state/pull_request.semver-minor.json' ) ;
152+
153+ // PR was created 10 days ago but marked ready 2 days ago.
154+ pull_request . created_at = new Date ( + new Date ( ) - 1000 * 60 * 60 * 24 * 10 ) . toISOString ( ) ;
155+ const readyForReviewTime = new Date ( + new Date ( ) - 1000 * 60 * 60 * 24 * 2 ) ;
156+
157+ moctokit . rest . issues . listEventsForTimeline = vi . fn ( ) . mockReturnValue ( {
158+ data : [
159+ {
160+ event : 'ready_for_review' ,
161+ created_at : readyForReviewTime . toISOString ( ) ,
162+ } ,
163+ ] ,
164+ } ) ;
165+
166+ const expectedTime = readyForReviewTime . getTime ( ) + MINIMUM_MINOR_OPEN_TIME ;
167+ const expectedDate = new Date ( expectedTime ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
168+ const readyDate = await getPRReadyDate ( moctokit , pull_request ) ;
139169
140170 expect ( readyDate ) . toEqual ( expectedDate ) ;
141171 } ) ;
@@ -531,6 +561,10 @@ describe('api review', () => {
531561 . get ( `/repos/electron/electron/issues/${ pull_request . number } /comments` )
532562 . reply ( 200 , [ c1 ] ) ;
533563
564+ nock ( GH_API )
565+ . get ( `/repos/electron/electron/issues/${ pull_request . number } /timeline` )
566+ . reply ( 200 , [ ] ) ;
567+
534568 nock ( GH_API )
535569 . post ( '/repos/electron/electron/check-runs' , ( body ) => {
536570 expect ( body ) . toMatchObject ( {
@@ -584,6 +618,10 @@ describe('api review', () => {
584618 . get ( `/repos/electron/electron/issues/${ pull_request . number } /comments` )
585619 . reply ( 200 , [ ] ) ;
586620
621+ nock ( GH_API )
622+ . get ( `/repos/electron/electron/issues/${ pull_request . number } /timeline` )
623+ . reply ( 200 , [ ] ) ;
624+
587625 nock ( GH_API )
588626 . get ( `/repos/electron/electron/issues/${ pull_request . number } /labels?per_page=100&page=1` )
589627 . reply ( 200 , [
@@ -678,6 +716,10 @@ describe('api review', () => {
678716 . get ( `/repos/electron/electron/issues/${ pull_request . number } /comments` )
679717 . reply ( 200 , [ ] ) ;
680718
719+ nock ( GH_API )
720+ . get ( `/repos/electron/electron/issues/${ pull_request . number } /timeline` )
721+ . reply ( 200 , [ ] ) ;
722+
681723 nock ( GH_API )
682724 . get ( `/repos/electron/electron/issues/${ pull_request . number } /labels?per_page=100&page=1` )
683725 . reply ( 200 , [
0 commit comments