rsnext/test/unit/recursive-copy.test.ts
JJ Kasper 975fb1f466
Fix windows unit tests (#53412)
Fixes differences in tests to handle windows now that we've fixed them
not being run.

x-ref:
https://github.com/vercel/next.js/pull/53408/checks?check_run_id=15501915673
2023-07-31 18:06:18 -07:00

94 lines
2.9 KiB
TypeScript

/* eslint-env jest */
import { recursiveCopy } from 'next/dist/lib/recursive-copy'
import { join } from 'path'
import fs from 'fs-extra'
import { readFileSync } from 'fs'
const testDir = join(__dirname, 'recursive-folder-test')
const srcDir = join(testDir, 'src')
const destDir = join(testDir, 'dest')
const setupTestDir = async (numFiles = 100) => {
const paths = [
'.hidden',
'file',
'folder1/file1',
'folder1/file2',
'link',
'linkfolder',
]
await fs.ensureDir(testDir)
// create src directory structure
await fs.ensureDir(srcDir)
await fs.outputFile(join(srcDir, '.hidden'), 'hidden')
await fs.outputFile(join(srcDir, 'file'), 'file')
await fs.outputFile(join(srcDir, 'folder1', 'file1'), 'file1')
await fs.outputFile(join(srcDir, 'folder1', 'file2'), 'file2')
await fs.ensureSymlink(join(srcDir, 'file'), join(srcDir, 'link'))
await fs.ensureSymlink(join(srcDir, 'folder1'), join(srcDir, 'linkfolder'))
for (let i = 0; i < numFiles - 6; i++) {
const path = join(`folder-${i}`, `file-${i}`)
await fs.outputFile(join(srcDir, path), `file-${i}`)
paths.push(path)
}
return paths
}
describe('recursiveCopy', () => {
if (process.platform === 'win32') {
it('should skip on windows to avoid symlink issues', () => {})
return
}
afterAll(() => fs.remove(testDir))
it('should work', async () => {
await fs.remove(testDir)
await setupTestDir(6)
await recursiveCopy(srcDir, destDir, {
filter(path) {
return path !== '/folder1/file1'
},
})
expect(await fs.pathExists(join(destDir, '.hidden'))).toBe(true)
expect(await fs.pathExists(join(destDir, 'file'))).toBe(true)
expect(await fs.pathExists(join(destDir, 'link'))).toBe(true)
expect(await fs.pathExists(join(destDir, 'folder1', 'file1'))).toBe(false)
expect(await fs.pathExists(join(destDir, 'folder1', 'file2'))).toBe(true)
expect(await fs.pathExists(join(destDir, 'linkfolder', 'file1'))).toBe(true)
expect(await fs.pathExists(join(destDir, 'linkfolder', 'file2'))).toBe(true)
expect(readFileSync(join(destDir, 'file'), 'utf8')).toBe('file')
expect(readFileSync(join(destDir, 'link'), 'utf8')).toBe('file')
expect(readFileSync(join(destDir, 'linkfolder', 'file1'), 'utf8')).toBe(
'file1'
)
})
it('should work with content existing in dest', async () => {
await fs.remove(testDir)
const paths = await setupTestDir(25)
await recursiveCopy(srcDir, destDir)
await recursiveCopy(srcDir, destDir, { overwrite: true })
for (const path of paths) {
expect(await fs.pathExists(join(destDir, path))).toBe(true)
}
})
it('should handle more files than concurrency', async () => {
await fs.remove(testDir)
const paths = await setupTestDir(100)
await recursiveCopy(srcDir, destDir, { concurrency: 50 })
for (const path of paths) {
expect(await fs.pathExists(join(destDir, path))).toBe(true)
}
})
})