[READ-ONLY] a fast, modern browser for the npm registry
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 113 lines 3.4 kB view raw
1import { describe, expect, it, vi } from 'vitest' 2import { mountSuspended, registerEndpoint } from '@nuxt/test-utils/runtime' 3import type { ModuleReplacement } from 'module-replacements' 4 5const SIMPLE_REPLACEMENT: ModuleReplacement = { 6 type: 'simple', 7 moduleName: 'is-even', 8 replacement: 'Use (n % 2) === 0', 9 category: 'micro-utilities', 10} 11 12const NATIVE_REPLACEMENT: ModuleReplacement = { 13 type: 'native', 14 moduleName: 'array-includes', 15 nodeVersion: '6.0.0', 16 replacement: 'Array.prototype.includes', 17 mdnPath: 'Global_Objects/Array/includes', 18 category: 'native', 19} 20 21async function mountWithDeps(deps: Record<string, string> | undefined) { 22 const captured = ref<Record<string, ModuleReplacement>>({}) 23 24 const WrapperComponent = defineComponent({ 25 setup() { 26 const replacements = useReplacementDependencies(() => deps) 27 28 watchEffect(() => { 29 captured.value = { ...replacements.value } 30 }) 31 32 return () => h('div') 33 }, 34 }) 35 36 await mountSuspended(WrapperComponent) 37 38 return captured 39} 40 41describe('useReplacementDependencies', () => { 42 it('returns replacements for dependencies that have them', async () => { 43 registerEndpoint('/api/replacements/is-even', () => SIMPLE_REPLACEMENT) 44 registerEndpoint('/api/replacements/picoquery', () => null) 45 46 const replacements = await mountWithDeps({ 47 'is-even': '^1.0.0', 48 'picoquery': '^1.0.0', 49 }) 50 51 await vi.waitFor(() => { 52 expect(replacements.value['is-even']).toBeDefined() 53 }) 54 55 expect(replacements.value['is-even']?.type).toBe('simple') 56 expect(replacements.value['picoquery']).toBeUndefined() 57 }) 58 59 it('returns empty object for undefined dependencies', async () => { 60 const replacements = await mountWithDeps(undefined) 61 62 await vi.waitFor(() => { 63 expect(replacements.value).toEqual({}) 64 }) 65 }) 66 67 it('returns empty object for empty dependencies', async () => { 68 const replacements = await mountWithDeps({}) 69 70 await vi.waitFor(() => { 71 expect(replacements.value).toEqual({}) 72 }) 73 }) 74 75 it('handles multiple dependencies with replacements', async () => { 76 registerEndpoint('/api/replacements/is-even', () => SIMPLE_REPLACEMENT) 77 registerEndpoint('/api/replacements/array-includes', () => NATIVE_REPLACEMENT) 78 registerEndpoint('/api/replacements/picoquery', () => null) 79 80 const replacements = await mountWithDeps({ 81 'is-even': '^1.0.0', 82 'array-includes': '^3.0.0', 83 'picoquery': '^1.0.0', 84 }) 85 86 await vi.waitFor(() => { 87 expect(Object.keys(replacements.value)).toHaveLength(2) 88 }) 89 90 expect(replacements.value['is-even']?.type).toBe('simple') 91 expect(replacements.value['array-includes']?.type).toBe('native') 92 expect(replacements.value['picoquery']).toBeUndefined() 93 }) 94 95 it('handles fetch errors gracefully', async () => { 96 registerEndpoint('/api/replacements/failing-package', () => { 97 throw new Error('Network error') 98 }) 99 registerEndpoint('/api/replacements/is-even', () => SIMPLE_REPLACEMENT) 100 101 const replacements = await mountWithDeps({ 102 'failing-package': '^1.0.0', 103 'is-even': '^1.0.0', 104 }) 105 106 await vi.waitFor(() => { 107 expect(replacements.value['is-even']).toBeDefined() 108 }) 109 110 expect(replacements.value['failing-package']).toBeUndefined() 111 expect(replacements.value['is-even']?.type).toBe('simple') 112 }) 113})