@@ -61,7 +61,15 @@ jest.mock('../src/fetch', () => ({
6161 } else if ( ! token || token === 'valid_token' ) {
6262 return { data : `[{"ref": "refs/tags/1.2.3", "url": "${ url } "}]` } ;
6363 } else if ( token === 'beta_token' ) {
64- return { data : `[{"ref": "refs/tags/1.2.3-beta1", "url": "${ url } "}]` } ;
64+ return { data : `[{"ref": "refs/tags/1.2.3beta1", "url": "${ url } "}]` } ;
65+ } else if ( token === 'rc_token' ) {
66+ return {
67+ data : `[{"ref":"refs/tags/3.0.0RC1"},{"ref":"refs/tags/3.0.0RC2"}]`
68+ } ;
69+ } else if ( token === 'non_semver_tags' ) {
70+ return {
71+ data : `[{"ref":"refs/tags/release-2025-09-18"},{"ref":"refs/tags/release-2025-09-17"}]`
72+ } ;
6573 } else if ( token === 'undefined_ref' ) {
6674 return {
6775 data : `[{"url":"${ url } "},{"ref":"refs/tags/v1.2.4","url":"${ url } "}]`
@@ -97,20 +105,41 @@ jest.mock('../src/packagist', () => ({
97105
98106describe ( 'Tools tests' , ( ) => {
99107 it . each `
100- token | version
101- ${ 'invalid_token' } | ${ '1.2' }
102- ${ 'valid_token' } | ${ '1.2.3' }
103- ${ 'beta_token' } | ${ '1.2.3-beta1' }
104- ${ 'undefined_ref' } | ${ '1.2.4' }
105- ${ 'multi_refs' } | ${ '1.2.4' }
106- ${ '' } | ${ '1.2.3' }
108+ token | version
109+ ${ 'invalid_token' } | ${ '1.2' }
110+ ${ 'valid_token' } | ${ '1.2.3' }
111+ ${ 'beta_token' } | ${ '1.2.3beta1' }
112+ ${ 'undefined_ref' } | ${ '1.2.4' }
113+ ${ 'multi_refs' } | ${ '1.2.4' }
114+ ${ 'non_semver_tags' } | ${ 'release-2025-09-18' }
115+ ${ '' } | ${ '1.2.3' }
107116 ` ( 'checking getSemverVersion: $token' , async ( { token, version} ) => {
108117 process . env [ 'GITHUB_TOKEN' ] = token ;
109118 expect (
110119 await tools . getSemverVersion ( getData ( { tool : 'tool' , version : '1.2' } ) )
111120 ) . toBe ( version ) ;
112121 } ) ;
113122
123+ it ( 'checking getSemverVersion triggers ?? fallback via Map#get mock' , async ( ) => {
124+ process . env [ 'GITHUB_TOKEN' ] = 'rc_token' ;
125+ const spy = jest
126+ . spyOn ( Map . prototype as Map < string , string > , 'get' )
127+ . mockImplementation ( function (
128+ this : Map < string , string > ,
129+ key : string
130+ ) : string | undefined {
131+ if ( key === '3.0.0-RC2' ) {
132+ return undefined ;
133+ }
134+ return Map . prototype . get . call ( this , key ) ;
135+ } ) ;
136+ const result = await tools . getSemverVersion (
137+ getData ( { tool : 'tool' , version : '3.0.0' } )
138+ ) ;
139+ expect ( result ) . toBe ( '3.0.0-RC2' ) ;
140+ spy . mockRestore ( ) ;
141+ } ) ;
142+
114143 it . each `
115144 tool | fetch_latest | version
116145 ${ 'tool' } | ${ 'true' } | ${ '3.2.1' }
0 commit comments