Swap-Aggregator-Subgraph/node_modules/fs-jetpack/spec/remove.spec.ts
Richa-iitr d211083153 Revert "Revert "added handler""
This reverts commit c36ee8c5ca.
2022-07-03 07:30:05 +05:30

215 lines
4.9 KiB
TypeScript

import * as fse from "fs-extra";
import { expect } from "chai";
import path from "./assert_path";
import helper from "./helper";
import * as jetpack from "..";
describe("remove", () => {
beforeEach(helper.setCleanTestCwd);
afterEach(helper.switchBackToCorrectCwd);
describe("doesn't throw if path already doesn't exist", () => {
it("sync", () => {
jetpack.remove("dir");
});
it("async", done => {
jetpack.removeAsync("dir").then(() => {
done();
});
});
});
describe("should delete file", () => {
const preparations = () => {
fse.outputFileSync("file.txt", "abc");
};
const expectations = () => {
path("file.txt").shouldNotExist();
};
it("sync", () => {
preparations();
jetpack.remove("file.txt");
expectations();
});
it("async", done => {
preparations();
jetpack.removeAsync("file.txt").then(() => {
expectations();
done();
});
});
});
describe("removes directory with stuff inside", () => {
const preparations = () => {
fse.mkdirsSync("a/b/c");
fse.outputFileSync("a/f.txt", "abc");
fse.outputFileSync("a/b/f.txt", "123");
};
const expectations = () => {
path("a").shouldNotExist();
};
it("sync", () => {
preparations();
jetpack.remove("a");
expectations();
});
it("async", done => {
preparations();
jetpack.removeAsync("a").then(() => {
expectations();
done();
});
});
});
describe("will retry attempt if file is locked", () => {
const preparations = () => {
fse.mkdirsSync("a/b/c");
fse.outputFileSync("a/f.txt", "abc");
fse.outputFileSync("a/b/f.txt", "123");
};
const expectations = () => {
path("a").shouldNotExist();
};
it("async", done => {
preparations();
fse.open("a/f.txt", "w", (err, fd) => {
if (err) {
done(err);
} else {
// Unlock the file after some time.
setTimeout(() => {
fse.close(fd);
}, 150);
jetpack
.removeAsync("a")
.then(() => {
expectations();
done();
})
.catch(done);
}
});
});
});
describe("respects internal CWD of jetpack instance", () => {
const preparations = () => {
fse.outputFileSync("a/b/c.txt", "123");
};
const expectations = () => {
path("a").shouldBeDirectory();
path("a/b").shouldNotExist();
};
it("sync", () => {
const jetContext = jetpack.cwd("a");
preparations();
jetContext.remove("b");
expectations();
});
it("async", done => {
const jetContext = jetpack.cwd("a");
preparations();
jetContext.removeAsync("b").then(() => {
expectations();
done();
});
});
});
describe("can be called with no parameters, what will remove CWD directory", () => {
const preparations = () => {
fse.outputFileSync("a/b/c.txt", "abc");
};
const expectations = () => {
path("a").shouldNotExist();
};
it("sync", () => {
const jetContext = jetpack.cwd("a");
preparations();
jetContext.remove();
expectations();
});
it("async", done => {
const jetContext = jetpack.cwd("a");
preparations();
jetContext.removeAsync().then(() => {
expectations();
done();
});
});
});
describe("removes only symlinks, never real content where symlinks point", () => {
const preparations = () => {
fse.outputFileSync("have_to_stay_file", "abc");
fse.mkdirsSync("to_remove");
fse.symlinkSync("../have_to_stay_file", "to_remove/symlink");
// Make sure we symlinked it properly.
expect(fse.readFileSync("to_remove/symlink", "utf8")).to.equal("abc");
};
const expectations = () => {
path("have_to_stay_file").shouldBeFileWithContent("abc");
path("to_remove").shouldNotExist();
};
it("sync", () => {
preparations();
jetpack.remove("to_remove");
expectations();
});
it("async", done => {
preparations();
jetpack.removeAsync("to_remove").then(() => {
expectations();
done();
});
});
});
describe("input validation", () => {
const tests = [
{ type: "sync", method: jetpack.remove as any, methodName: "remove" },
{
type: "async",
method: jetpack.removeAsync as any,
methodName: "removeAsync"
}
];
describe('"path" argument', () => {
tests.forEach(test => {
it(test.type, () => {
expect(() => {
test.method(true);
}).to.throw(
`Argument "path" passed to ${
test.methodName
}([path]) must be a string or an undefined. Received boolean`
);
});
});
});
});
});