import path from 'node:path'import url from 'node:url'import unimport from 'unimport/unplugin'import { expect, vi, test } from 'vitest'import { isNuxtFramework, optimizeForNuxt } from '../../../src/vite/frameworks/nuxt.js'import { hasFileByExtensions, hasDir } from '../../../src/vite/utils.js'const __dirname = path.dirname(url.fileURLToPath(import.meta.url))const rootDir = path.resolve(__dirname, '__fixtures__')vi.mock('unimport/unplugin', () => ({default: { vite: vi.fn().mockReturnValue('the right plugin') }}))vi.mock('unimport', () => ({scanDirExports: vi.fn().mockResolvedValue([{from: '/foo/bar',name: 'foobar',as: 'foobar'}, {from: '/node_modules/nuxt/dist/app/composables/foo',name: 'barfoo',as: 'barfoo'}]),scanExports: vi.fn().mockResolvedValue([{from: '/foo/bar/loo',name: 'foobarloo',as: 'foobarloo'}])}))vi.mock('import-meta-resolve', () => ({resolve: vi.fn().mockResolvedValue(url.pathToFileURL('/foo/bar'))}))vi.mock('@nuxt/kit', () => ({loadNuxtConfig: vi.fn().mockResolvedValue({_layers: [{config: {srcDir: '/foo/bar',imports: {dirs: ['foobar']}}}],alias: {'~': '/foo/bar'}})}))vi.mock('../../../src/vite/utils.js', () => ({hasFileByExtensions: vi.fn(),hasDir: vi.fn()}))vi.mock('/foo/bar/nuxt.config.js', () => ({}))test('isNuxtFramework', async () => {expect(await isNuxtFramework('/foo/bar')).toBe(false)vi.mocked(hasDir).mockResolvedValueOnce(false)vi.mocked(hasFileByExtensions).mockResolvedValueOnce('true')expect(await isNuxtFramework('/foo/bar')).toBe(true)})test('optimizeForNuxt', async () => {const options: any = {}vi.mocked(hasDir).mockResolvedValueOnce(true)vi.mocked(hasFileByExtensions).mockResolvedValueOnce('true')const optimizations = await optimizeForNuxt(options, { rootDir } as any)expect(optimizations).toEqual( {plugins: ['the right plugin'],resolve: {alias: {'~': '/foo/bar'},},})expect(unimport.vite).toBeCalledWith({imports: [{from: '/foo/bar',name: 'foobar',as: 'foobar'}, {from: 'virtual:wdio',name: 'wrappedFn',as: 'barfoo'}, {from: '/foo/bar/loo',name: 'foobarloo',as: 'foobarloo'}],presets: ['vue']})})