fs-safe-copy
Version:
Copy some files easily. Check your copy checksum.
79 lines (66 loc) • 2.8 kB
JavaScript
const test = require('ava')
const path = require('path')
const fs = require('fs')
const { getTestDirectory, createTestFile } = require('../helpers/utils')
const { RecursiveCopyException } = require('../../lib/errors/RecursiveCopyException')
const { FolderCopier } = require('../../lib/Copier/FolderCopier')
const { createDirectory, removeDirectory } = require('../helpers/utils')
const TEST_DIRECTORY = getTestDirectory()
function getPath (file) {
return path.join(TEST_DIRECTORY, file)
}
test.before(async () => {
await removeDirectory(TEST_DIRECTORY)
await createDirectory(TEST_DIRECTORY)
})
test.after(async () => {
await removeDirectory(TEST_DIRECTORY)
})
test('copy subdirectory', async t => {
const fileSrc = getPath('')
const fileDest = getPath('subdirectory')
const copier = new FolderCopier(fileSrc, fileDest)
const exception = await t.throws(copier.copy())
t.deepEqual(exception, new RecursiveCopyException(`cannot copy '${fileSrc}' to a subdirectory of itself, '${fileDest}'.`))
})
test('copy directory', async t => {
const directorySrc = getPath('directorySrc')
await createDirectory(directorySrc)
const dataInFile = 'data in file'
const numbers = Array.from({ length: 5 }, (val, index) => index)
for (const number of numbers) {
const fileName = `TEST_FILE_${number}.txt`
await createTestFile(path.join(directorySrc, fileName), `${dataInFile} ${fileName}`)
}
const copier = new FolderCopier(directorySrc, TEST_DIRECTORY)
await copier.copy()
for (const number of numbers) {
const fileName = `TEST_FILE_${number}.txt`
t.is(fs.readFileSync(getPath(fileName)).toString(), `${dataInFile} ${fileName}`, `should exist the file ${fileName} with correct content`)
}
})
test('copy directory: check that only the files are copied', async t => {
const folder = 'directorySrcOnlyFiles'
const directorySrc = getPath(folder)
await createDirectory(directorySrc)
const dataInFile = 'data in file'
const numbers = Array.from({ length: 5 }, (val, index) => index)
for (const number of numbers) {
const fileName = `TEST_FILE_${number}.txt`
await createTestFile(path.join(directorySrc, fileName), `${dataInFile} ${fileName}`)
}
await createDirectory(getPath(`${folder}/not-copy`))
const copier = new FolderCopier(directorySrc, TEST_DIRECTORY)
await copier.copy()
for (const number of numbers) {
const fileName = `TEST_FILE_${number}.txt`
t.is(fs.readFileSync(getPath(fileName)).toString(), `${dataInFile} ${fileName}`, `should exist the file ${fileName} with correct content`)
}
try {
fs.readdirSync(getPath('not-copy'))
} catch (err) {
t.truthy(err, 'should exist an error because the folder does not exits')
t.is(err.code, 'ENOENT')
t.true(typeof files === 'undefined')
}
})