1+ import { ref , watchEffect , h , defineComponent } from 'vue'
12import { afterEach , describe , expect , it , vi } from 'vitest'
23import { mountSuspended } from '@nuxt/test-utils/runtime'
34import type { ModuleReplacement } from 'module-replacements'
@@ -50,12 +51,13 @@ describe('useCompareReplacements', () => {
5051 vi . fn ( ) . mockImplementation ( ( url : string ) => {
5152 if ( url . includes ( '/api/replacements/array-includes' ) ) {
5253 return Promise . resolve ( {
54+ id : 'array-includes' ,
5355 type : 'native' ,
54- moduleName : 'array- includes',
55- nodeVersion : ' 6.0.0',
56- replacement : 'Array.prototype.includes' ,
57- mdnPath : 'Global_Objects/ Array/ includes' ,
58- category : 'native' ,
56+ url : { type : 'mdn' , id : 'Global_Objects/Array/ includes' } ,
57+ engines : [ { engine : 'nodejs' , minVersion : ' 6.0.0' } ] ,
58+ nodeFeatureId : {
59+ moduleName : 'Array.prototype. includes' ,
60+ } ,
5961 } satisfies ModuleReplacement )
6062 }
6163 return Promise . resolve ( null )
@@ -70,6 +72,7 @@ describe('useCompareReplacements', () => {
7072 expect ( noDepSuggestions . value ) . toHaveLength ( 1 )
7173 } )
7274
75+ // Note: forPackage likely maps to the 'id' in the new schema or the original query
7376 expect ( noDepSuggestions . value [ 0 ] ?. forPackage ) . toBe ( 'array-includes' )
7477 expect ( noDepSuggestions . value [ 0 ] ?. replacement . type ) . toBe ( 'native' )
7578 expect ( infoSuggestions . value ) . toHaveLength ( 0 )
@@ -81,10 +84,9 @@ describe('useCompareReplacements', () => {
8184 vi . fn ( ) . mockImplementation ( ( url : string ) => {
8285 if ( url . includes ( '/api/replacements/is-even' ) ) {
8386 return Promise . resolve ( {
87+ id : 'is-even' ,
8488 type : 'simple' ,
85- moduleName : 'is-even' ,
86- replacement : 'Use (n % 2) === 0' ,
87- category : 'micro-utilities' ,
89+ description : 'Use (n % 2) === 0' ,
8890 } satisfies ModuleReplacement )
8991 }
9092 return Promise . resolve ( null )
@@ -110,10 +112,11 @@ describe('useCompareReplacements', () => {
110112 vi . fn ( ) . mockImplementation ( ( url : string ) => {
111113 if ( url . includes ( '/api/replacements/moment' ) ) {
112114 return Promise . resolve ( {
115+ id : 'moment' ,
113116 type : 'documented' ,
114- moduleName : 'moment ' ,
115- docPath : 'moment ' ,
116- category : 'preferred' ,
117+ url : 'https://momentjs.com/docs/#/use-it/built-in-alternatives/ ' ,
118+ replacementModule : 'date-fns ' ,
119+ preferred : true ,
117120 } satisfies ModuleReplacement )
118121 }
119122 return Promise . resolve ( null )
@@ -139,28 +142,25 @@ describe('useCompareReplacements', () => {
139142 vi . fn ( ) . mockImplementation ( ( url : string ) => {
140143 if ( url . includes ( '/api/replacements/is-odd' ) ) {
141144 return Promise . resolve ( {
145+ id : 'is-odd' ,
142146 type : 'simple' ,
143- moduleName : 'is-odd' ,
144- replacement : 'Use (n % 2) !== 0' ,
145- category : 'micro-utilities' ,
147+ description : 'Use (n % 2) !== 0' ,
146148 } satisfies ModuleReplacement )
147149 }
148150 if ( url . includes ( '/api/replacements/lodash' ) ) {
149151 return Promise . resolve ( {
152+ id : 'lodash' ,
150153 type : 'documented' ,
151- moduleName : 'lodash' ,
152- docPath : 'lodash-underscore' ,
153- category : 'preferred' ,
154+ url : 'https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore' ,
155+ replacementModule : 'native' ,
154156 } satisfies ModuleReplacement )
155157 }
156158 if ( url . includes ( '/api/replacements/array-map' ) ) {
157159 return Promise . resolve ( {
160+ id : 'array-map' ,
158161 type : 'native' ,
159- moduleName : 'array-map' ,
160- nodeVersion : '0.10.0' ,
161- replacement : 'Array.prototype.map' ,
162- mdnPath : 'Global_Objects/Array/map' ,
163- category : 'native' ,
162+ url : { type : 'mdn' , id : 'Global_Objects/Array/map' } ,
163+ engines : [ { engine : 'nodejs' , minVersion : '0.10.0' } ] ,
164164 } satisfies ModuleReplacement )
165165 }
166166 return Promise . resolve ( null )
@@ -178,12 +178,9 @@ describe('useCompareReplacements', () => {
178178 expect ( infoSuggestions . value ) . toHaveLength ( 1 )
179179 } )
180180
181- // no dep should have simple and native
182181 const noDepTypes = noDepSuggestions . value . map ( s => s . replacement . type )
183182 expect ( noDepTypes ) . toContain ( 'simple' )
184183 expect ( noDepTypes ) . toContain ( 'native' )
185-
186- // Info should have documented
187184 expect ( infoSuggestions . value [ 0 ] ?. replacement . type ) . toBe ( 'documented' )
188185 } )
189186 } )
@@ -192,12 +189,7 @@ describe('useCompareReplacements', () => {
192189 it ( 'does not include packages with no replacement data' , async ( ) => {
193190 vi . stubGlobal (
194191 '$fetch' ,
195- vi . fn ( ) . mockImplementation ( ( url : string ) => {
196- if ( url . includes ( '/api/replacements/react' ) ) {
197- return Promise . resolve ( null ) // No replacement for react
198- }
199- return Promise . resolve ( null )
200- } ) ,
192+ vi . fn ( ) . mockImplementation ( ( ) => Promise . resolve ( null ) ) ,
201193 )
202194
203195 const { noDepSuggestions, infoSuggestions, replacements } =
@@ -214,21 +206,16 @@ describe('useCompareReplacements', () => {
214206 it ( 'handles fetch errors gracefully' , async ( ) => {
215207 vi . stubGlobal (
216208 '$fetch' ,
217- vi . fn ( ) . mockImplementation ( ( ) => {
218- return Promise . reject ( new Error ( 'Network error' ) )
219- } ) ,
209+ vi . fn ( ) . mockImplementation ( ( ) => Promise . reject ( new Error ( 'Network error' ) ) ) ,
220210 )
221211
222- const { noDepSuggestions, infoSuggestions, replacements } =
223- await useCompareReplacementsInComponent ( [ 'some-package' ] )
212+ const { replacements } = await useCompareReplacementsInComponent ( [ 'some-package' ] )
224213
225214 await vi . waitFor ( ( ) => {
226215 expect ( replacements . value . has ( 'some-package' ) ) . toBe ( true )
227216 } )
228217
229218 expect ( replacements . value . get ( 'some-package' ) ) . toBeNull ( )
230- expect ( noDepSuggestions . value ) . toHaveLength ( 0 )
231- expect ( infoSuggestions . value ) . toHaveLength ( 0 )
232219 } )
233220 } )
234221
@@ -237,10 +224,9 @@ describe('useCompareReplacements', () => {
237224 const fetchMock = vi . fn ( ) . mockImplementation ( ( url : string ) => {
238225 if ( url . includes ( '/api/replacements/is-even' ) ) {
239226 return Promise . resolve ( {
227+ id : 'is-even' ,
240228 type : 'simple' ,
241- moduleName : 'is-even' ,
242- replacement : 'Use (n % 2) === 0' ,
243- category : 'micro-utilities' ,
229+ description : 'Use (n % 2) === 0' ,
244230 } satisfies ModuleReplacement )
245231 }
246232 return Promise . resolve ( null )
0 commit comments