@applicaster/zapplicaster-cli
Version:
CLI Tool for the zapp app and Quick Brick project
94 lines (75 loc) • 2.15 kB
JavaScript
const fs = jest.genMockFromModule("fs");
const _fs = jest.requireActual("fs");
const R = require("ramda");
function readdirSync(folder) {
return _fs.readdirSync(folder);
}
function readdir(folder, callback) {
const files = R.map(R.prop("fileName"), fs.__writenFiles);
callback(null, files);
}
function writeFile() {
const callback = R.last(arguments);
const [fileName, content] = R.init(arguments); // eslint-disable-line no-unused-vars
const __writtenFiles = {
fileName,
content,
};
fs.__writenFiles.push(__writtenFiles);
callback(null, __writtenFiles.content);
}
function getMockedFileContent(fileName) {
return R.compose(
R.unless(R.isNil, R.prop("content")),
R.find(R.propEq("fileName", fileName))
)(fs.__writenFiles);
}
function readFile(fileName, callback) {
callback(null, Buffer.from(getMockedFileContent(fileName)));
}
function readFileSync(fileName) {
return Buffer.from(getMockedFileContent(fileName));
}
function copyFile(_source, _destination, callback) {
callback(null, { status: "ok" });
}
function copyFileSync() {
return { status: "ok" };
}
function existsSync(path) {
return R.includes(path, R.map(R.prop("fileName"), fs.__writenFiles));
}
function statSync(fileName) {
if (fileName === "not_a_file") {
const error = new Error("ENOENT: no such file or directory");
error.code = "ENOENT";
throw error;
}
return {
isFile: () => true,
};
}
function __addMockedFiles(fileName, content) {
try {
const json = JSON.stringify(content);
fs.__writenFiles.push({ fileName, content: json });
} catch (e) {
fs.__writenFiles.push({ fileName, content });
}
}
function __resetFiles() {
fs.__writenFiles = [];
}
fs.__writenFiles = [];
fs.__resetFiles = __resetFiles;
fs.__addMockedFiles = __addMockedFiles;
fs.readdirSync = readdirSync;
fs.readdir = jest.fn(readdir);
fs.writeFile = jest.fn(writeFile);
fs.readFile = jest.fn(readFile);
fs.readFileSync = jest.fn(readFileSync);
fs.copyFile = jest.fn(copyFile);
fs.copyFileSync = jest.fn(copyFileSync);
fs.existsSync = jest.fn(existsSync);
fs.statSync = jest.fn(statSync);
module.exports = fs;