🏡 index : quine-global/webdriverio.git

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']
    })
})