186 lines
4.9 KiB
TypeScript
186 lines
4.9 KiB
TypeScript
import fs from 'node:fs'
|
|
import { addDependency } from 'nypm'
|
|
import path from 'pathe'
|
|
import { afterEach, expect, it, vi } from 'vitest'
|
|
|
|
import { runInit } from '../../src/commands/init'
|
|
import { getConfig } from '../../src/utils/get-config'
|
|
import * as registry from '../../src/utils/registry'
|
|
|
|
vi.mock('nypm')
|
|
vi.mock('fs/promises', () => ({
|
|
writeFile: vi.fn(),
|
|
mkdir: vi.fn(),
|
|
}))
|
|
vi.mock('ora')
|
|
|
|
it.skip('init config-full', async () => {
|
|
vi.spyOn(registry, 'getRegistryBaseColor').mockResolvedValue({
|
|
inlineColors: {},
|
|
cssVars: {},
|
|
inlineColorsTemplate:
|
|
'@tailwind base;\n@tailwind components;\n@tailwind utilities;\n',
|
|
cssVarsTemplate:
|
|
'@tailwind base;\n@tailwind components;\n@tailwind utilities;\n',
|
|
})
|
|
vi.spyOn(registry, 'getRegistryItem').mockResolvedValue({
|
|
name: 'new-york',
|
|
dependencies: [
|
|
'tailwindcss-animate',
|
|
'class-variance-authority',
|
|
'clsx',
|
|
'tailwind-merge',
|
|
'lucide-vue-next',
|
|
'@radix-icons/vue',
|
|
],
|
|
registryDependencies: [],
|
|
tailwind: {
|
|
config: {
|
|
theme: {
|
|
extend: {
|
|
borderRadius: {
|
|
lg: 'var(--radius)',
|
|
md: 'calc(var(--radius) - 2px)',
|
|
sm: 'calc(var(--radius) - 4px)',
|
|
},
|
|
},
|
|
},
|
|
plugins: ['require("tailwindcss-animate")'],
|
|
},
|
|
},
|
|
files: [],
|
|
cssVariables: {
|
|
light: {
|
|
'--radius': '0.5rem',
|
|
},
|
|
},
|
|
})
|
|
|
|
const mockMkdir = vi.spyOn(fs.promises, 'mkdir').mockResolvedValue(undefined)
|
|
const mockWriteFile = vi.spyOn(fs.promises, 'writeFile').mockResolvedValue()
|
|
|
|
const targetDir = path.resolve(__dirname, '../fixtures/config-full')
|
|
const config = await getConfig(targetDir)
|
|
|
|
await runInit(config!)
|
|
|
|
expect(mockMkdir).toHaveBeenNthCalledWith(
|
|
1,
|
|
expect.stringMatching(/src\/lib$/),
|
|
expect.anything(),
|
|
)
|
|
expect(mockMkdir).toHaveBeenNthCalledWith(
|
|
2,
|
|
expect.stringMatching(/src\/components$/),
|
|
expect.anything(),
|
|
)
|
|
expect(mockWriteFile).toHaveBeenNthCalledWith(
|
|
1,
|
|
expect.stringMatching(/tailwind.config.ts$/),
|
|
expect.stringContaining('/** @type {import(\'tailwindcss\').Config} */'),
|
|
'utf8',
|
|
)
|
|
expect(mockWriteFile).toHaveBeenNthCalledWith(
|
|
2,
|
|
expect.stringMatching(/src\/app\/globals.css$/),
|
|
expect.stringContaining('@tailwind base'),
|
|
'utf8',
|
|
)
|
|
expect(mockWriteFile).toHaveBeenNthCalledWith(
|
|
3,
|
|
expect.stringMatching(/src\/lib\/utils.ts$/),
|
|
expect.stringContaining('import { type ClassValue, clsx } from \'clsx\''),
|
|
'utf8',
|
|
)
|
|
expect(addDependency).toHaveBeenCalledWith(
|
|
[
|
|
'tailwindcss-animate',
|
|
'class-variance-authority',
|
|
'clsx',
|
|
'tailwind-merge',
|
|
'reka-ui',
|
|
'@radix-icons/vue',
|
|
],
|
|
{
|
|
cwd: targetDir,
|
|
silent: true,
|
|
},
|
|
)
|
|
|
|
mockMkdir.mockRestore()
|
|
mockWriteFile.mockRestore()
|
|
})
|
|
|
|
// it('init config-partial', async () => {
|
|
// vi.spyOn(registry, 'getRegistryBaseColor').mockResolvedValue({
|
|
// inlineColors: {},
|
|
// cssVars: {},
|
|
// inlineColorsTemplate:
|
|
// '@tailwind base;\n@tailwind components;\n@tailwind utilities;\n',
|
|
// cssVarsTemplate:
|
|
// '@tailwind base;\n@tailwind components;\n@tailwind utilities;\n',
|
|
// })
|
|
// const mockMkdir = vi.spyOn(fs.promises, 'mkdir').mockResolvedValue(undefined)
|
|
// const mockWriteFile = vi.spyOn(fs.promises, 'writeFile').mockResolvedValue()
|
|
|
|
// const targetDir = path.resolve(__dirname, '../fixtures/config-partial')
|
|
// const config = await getConfig(targetDir)
|
|
|
|
// await runInit(config!)
|
|
|
|
// expect(mockMkdir).toHaveBeenNthCalledWith(
|
|
// 1,
|
|
// expect.stringMatching(/src\/assets\/css$/),
|
|
// expect.anything(),
|
|
// )
|
|
// expect(mockMkdir).toHaveBeenNthCalledWith(
|
|
// 2,
|
|
// expect.stringMatching(/lib$/),
|
|
// expect.anything(),
|
|
// )
|
|
// expect(mockMkdir).toHaveBeenNthCalledWith(
|
|
// 3,
|
|
// expect.stringMatching(/components$/),
|
|
// expect.anything(),
|
|
// )
|
|
// expect(mockWriteFile).toHaveBeenNthCalledWith(
|
|
// 1,
|
|
// expect.stringMatching(/tailwind.config.ts$/),
|
|
// expect.stringContaining('/** @type {import(\'tailwindcss\').Config} */'),
|
|
// 'utf8',
|
|
// )
|
|
// expect(mockWriteFile).toHaveBeenNthCalledWith(
|
|
// 2,
|
|
// expect.stringMatching(/src\/assets\/css\/tailwind.css$/),
|
|
// expect.stringContaining('@tailwind base'),
|
|
// 'utf8',
|
|
// )
|
|
// expect(mockWriteFile).toHaveBeenNthCalledWith(
|
|
// 3,
|
|
// expect.stringMatching(/utils.ts$/),
|
|
// expect.stringContaining('import { type ClassValue, clsx } from \'clsx\''),
|
|
// 'utf8',
|
|
// )
|
|
// expect(addDependency).toHaveBeenCalledWith(
|
|
// [
|
|
// 'tailwindcss-animate',
|
|
// 'class-variance-authority',
|
|
// 'clsx',
|
|
// 'tailwind-merge',
|
|
// 'reka-ui',
|
|
// 'lucide-vue-next',
|
|
// ],
|
|
// {
|
|
// cwd: targetDir,
|
|
// silent: true,
|
|
// },
|
|
// )
|
|
|
|
// mockMkdir.mockRestore()
|
|
// mockWriteFile.mockRestore()
|
|
// })
|
|
|
|
afterEach(() => {
|
|
vi.resetAllMocks()
|
|
})
|