@@ -61,7 +61,15 @@ jest.mock('../src/fetch', () => ({
61
61
} else if ( ! token || token === 'valid_token' ) {
62
62
return { data : `[{"ref": "refs/tags/1.2.3", "url": "${ url } "}]` } ;
63
63
} 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
+ } ;
65
73
} else if ( token === 'undefined_ref' ) {
66
74
return {
67
75
data : `[{"url":"${ url } "},{"ref":"refs/tags/v1.2.4","url":"${ url } "}]`
@@ -97,20 +105,41 @@ jest.mock('../src/packagist', () => ({
97
105
98
106
describe ( 'Tools tests' , ( ) => {
99
107
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' }
107
116
` ( 'checking getSemverVersion: $token' , async ( { token, version} ) => {
108
117
process . env [ 'GITHUB_TOKEN' ] = token ;
109
118
expect (
110
119
await tools . getSemverVersion ( getData ( { tool : 'tool' , version : '1.2' } ) )
111
120
) . toBe ( version ) ;
112
121
} ) ;
113
122
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
+
114
143
it . each `
115
144
tool | fetch_latest | version
116
145
${ 'tool' } | ${ 'true' } | ${ '3.2.1' }
0 commit comments