@@ -102,10 +102,20 @@ describe('fetchGitHub', () => {
102102 } ) ;
103103
104104 it ( 'falls back to tags API when releases API returns no matches' , async ( ) => {
105- // Releases API returns empty after filtering
105+ const commitDate = ( date : string ) =>
106+ new Response ( JSON . stringify ( { committer : { date : `${ date } T12:00:00Z` } } ) , {
107+ status : 200
108+ } ) ;
109+
110+ // Releases API returns empty after filtering, then tags API, then per-tag commits
106111 vi . spyOn ( globalThis , 'fetch' )
107112 . mockResolvedValueOnce ( new Response ( JSON . stringify ( [ ] ) , { status : 200 } ) )
108- . mockResolvedValueOnce ( new Response ( JSON . stringify ( tagsFixture ) , { status : 200 } ) ) ;
113+ . mockResolvedValueOnce ( new Response ( JSON . stringify ( tagsFixture ) , { status : 200 } ) )
114+ . mockResolvedValueOnce ( commitDate ( '2026-03-10' ) )
115+ . mockResolvedValueOnce ( commitDate ( '2026-03-05' ) )
116+ . mockResolvedValueOnce ( commitDate ( '2026-02-20' ) )
117+ . mockResolvedValueOnce ( commitDate ( '2026-02-10' ) )
118+ . mockResolvedValueOnce ( commitDate ( '2026-01-15' ) ) ;
109119
110120 const config : PackageConfig = {
111121 ...baseConfig ,
@@ -116,7 +126,9 @@ describe('fetchGitHub', () => {
116126
117127 expect ( result . releases ) . toHaveLength ( 5 ) ;
118128 expect ( result . latest ?. version ) . toBe ( '16.2' ) ;
129+ expect ( result . latest ?. date ) . toBe ( '2026-03-10' ) ;
119130 expect ( result . releases [ 2 ] . version ) . toBe ( '15.6' ) ;
131+ expect ( result . releases [ 2 ] . date ) . toBe ( '2026-02-20' ) ;
120132 } ) ;
121133
122134 it ( 'filters monorepo releases by tagPattern (e.g. Astro)' , async ( ) => {
0 commit comments