Skip to content

Commit

Permalink
bring back deleted move tests
Browse files Browse the repository at this point in the history
  • Loading branch information
manidlou committed Mar 26, 2020
1 parent 3de2b16 commit ff83f16
Showing 1 changed file with 147 additions and 0 deletions.
147 changes: 147 additions & 0 deletions lib/move/__tests__/move-prevent-moving-into-itself.test.js
Expand Up @@ -164,6 +164,153 @@ describe('+ move() - prevent moving into itself', () => {
return testError(src, dest, done)
})
})

describe('>> when dest is a symlink', () => {
it('should error when dest is a subdirectory of src (bind-mounted directory with subdirectory)', done => {
const destLink = path.join(TEST_DIR, 'dest-symlink')
fs.symlinkSync(src, destLink, 'dir')

const srclenBefore = klawSync(src).length
assert(srclenBefore > 2)

const dest = path.join(destLink, 'dir1')
assert(fs.existsSync(dest))
fs.move(src, dest, err => {
assert.strictEqual(err.message, `Cannot move '${src}' to a subdirectory of itself, '${dest}'.`)

const srclenAfter = klawSync(src).length
assert.strictEqual(srclenAfter, srclenBefore, 'src length should not change')

const link = fs.readlinkSync(destLink)
assert.strictEqual(link, src)
done()
})
})

it('should error when dest is a subdirectory of src (more than one level depth)', done => {
const destLink = path.join(TEST_DIR, 'dest-symlink')
fs.symlinkSync(src, destLink, 'dir')

const srclenBefore = klawSync(src).length
assert(srclenBefore > 2)

const dest = path.join(destLink, 'dir1', 'dir2')
assert(fs.existsSync(dest))
fs.move(src, dest, err => {
assert.strictEqual(err.message, `Cannot move '${src}' to a subdirectory of itself, '${path.join(destLink, 'dir1')}'.`)

const srclenAfter = klawSync(src).length
assert.strictEqual(srclenAfter, srclenBefore, 'src length should not change')

const link = fs.readlinkSync(destLink)
assert.strictEqual(link, src)
done()
})
})
})
})

describe('> when source is a symlink', () => {
describe('>> when dest is a directory', () => {
it('should error when resolved src path points to dest', done => {
const srcLink = path.join(TEST_DIR, 'src-symlink')
fs.symlinkSync(src, srcLink, 'dir')

const dest = path.join(TEST_DIR, 'src')

fs.move(srcLink, dest, err => {
assert(err)
// assert source not affected
const link = fs.readlinkSync(srcLink)
assert.strictEqual(link, src)
done()
})
})

it('should error when dest is a subdir of resolved src path', done => {
const srcLink = path.join(TEST_DIR, 'src-symlink')
fs.symlinkSync(src, srcLink, 'dir')

const dest = path.join(TEST_DIR, 'src', 'some', 'nested', 'dest')
fs.mkdirsSync(dest)

fs.move(srcLink, dest, err => {
assert(err)
const link = fs.readlinkSync(srcLink)
assert.strictEqual(link, src)
done()
})
})

it('should error when resolved src path is a subdir of dest', done => {
const dest = path.join(TEST_DIR, 'dest')

const resolvedSrcPath = path.join(dest, 'contains', 'src')
const srcLink = path.join(TEST_DIR, 'src-symlink')
fs.copySync(src, resolvedSrcPath)

// make symlink that points to a subdir in dest
fs.symlinkSync(resolvedSrcPath, srcLink, 'dir')

fs.move(srcLink, dest, err => {
assert(err)
done()
})
})

it("should move the directory successfully when dest is 'src_src/dest'", done => {
const srcLink = path.join(TEST_DIR, 'src-symlink')
fs.symlinkSync(src, srcLink, 'dir')

const dest = path.join(TEST_DIR, 'src_src', 'dest')
testSuccessDir(srcLink, dest, () => {
const link = fs.readlinkSync(dest)
assert.strictEqual(link, src)
done()
})
})

it("should move the directory successfully when dest is 'srcsrc/dest'", done => {
const srcLink = path.join(TEST_DIR, 'src-symlink')
fs.symlinkSync(src, srcLink, 'dir')

const dest = path.join(TEST_DIR, 'srcsrc', 'dest')
testSuccessDir(srcLink, dest, () => {
const link = fs.readlinkSync(dest)
assert.strictEqual(link, src)
done()
})
})
})

describe('>> when dest is a symlink', () => {
it('should error when resolved dest path is exactly the same as resolved src path and dereferene is true', done => {
const srcLink = path.join(TEST_DIR, 'src-symlink')
fs.symlinkSync(src, srcLink, 'dir')
const destLink = path.join(TEST_DIR, 'dest-symlink')
fs.symlinkSync(src, destLink, 'dir')

const srclenBefore = klawSync(srcLink).length
const destlenBefore = klawSync(destLink).length
assert(srclenBefore > 2)
assert(destlenBefore > 2)

fs.move(srcLink, destLink, { dereference: true }, err => {
assert.strictEqual(err.message, 'Source and destination must not be the same.')

const srclenAfter = klawSync(srcLink).length
assert.strictEqual(srclenAfter, srclenBefore, 'src length should not change')
const destlenAfter = klawSync(destLink).length
assert.strictEqual(destlenAfter, destlenBefore, 'dest length should not change')

const srcln = fs.readlinkSync(srcLink)
assert.strictEqual(srcln, src)
const destln = fs.readlinkSync(destLink)
assert.strictEqual(destln, src)
done()
})
})
})
})
})

Expand Down

0 comments on commit ff83f16

Please sign in to comment.