memserver
Version:
in-memory database/ORM and http mock server you can run in-browser and node environments. Built for large frontend teams, fast tests and rapid prototyping
120 lines (99 loc) • 3.95 kB
JavaScript
import fs from 'fs/promises';
import { module, test } from "qunitx";
import util from "util";
import child_process from "child_process";
const CWD = process.cwd();
const shell = util.promisify(child_process.exec);
const PKG_PATH = `${CWD}/packages/@memserver/cli`;
const CLI_JS = `${PKG_PATH}/src/cli.js`;
module("@memserver/cli | $ memserver init", function (hooks) {
hooks.beforeEach(async function() {
await fs.rm(`${CWD}/memserver`, { force: true, recursive: true });
});
test("$ memserver init | sets up the initial folder structure", async function (assert) {
assert.expect(7);
assert.ok(!(await pathExists(`${CWD}/memserver`)));
const expectedOutput =
"[Memserver CLI] /memserver/index.ts created\n" +
"[Memserver CLI] /memserver/routes.ts created\n" +
"[Memserver CLI] /memserver/initializer.ts created\n" +
"[Memserver CLI] /memserver/fixtures folder created\n" +
"[Memserver CLI] /memserver/models folder created\n";
const { stdout } = await shell(`node ${CLI_JS} init`);
assert.equal(stdout, expectedOutput);
const [
indexBuffer,
routesBuffer,
initializerBuffer,
fixturesFolderExistence,
modelsFolderExists
] = await Promise.all([
fs.readFile(`${CWD}/memserver/index.ts`),
fs.readFile(`${CWD}/memserver/routes.ts`),
fs.readFile(`${CWD}/memserver/initializer.ts`),
pathExists(`${CWD}/memserver/fixtures`),
pathExists(`${CWD}/memserver/models`)
]);
const [
targetIndexFileBuffer,
targetRoutesFileBuffer,
targetInitializerBuffer
] = await Promise.all([
fs.readFile(`${PKG_PATH}/memserver-boilerplate/index.ts`),
fs.readFile(`${PKG_PATH}/memserver-boilerplate/routes.ts`),
fs.readFile(`${PKG_PATH}/memserver-boilerplate/initializer.ts`)
]);
assert.equal(indexBuffer.toString(), targetIndexFileBuffer.toString());
assert.equal(routesBuffer.toString(), targetRoutesFileBuffer.toString());
assert.equal(initializerBuffer.toString(), targetInitializerBuffer.toString());
assert.ok(fixturesFolderExistence);
assert.ok(modelsFolderExists);
});
test("$ memserver new | sets up the initial folder structure", async function (assert) {
assert.expect(7);
assert.ok(!(await pathExists(`${CWD}/memserver`)));
const expectedOutput =
"[Memserver CLI] /memserver/index.ts created\n" +
"[Memserver CLI] /memserver/routes.ts created\n" +
"[Memserver CLI] /memserver/initializer.ts created\n" +
"[Memserver CLI] /memserver/fixtures folder created\n" +
"[Memserver CLI] /memserver/models folder created\n";
const { stdout } = await shell(`node ${CLI_JS} new`);
assert.equal(stdout, expectedOutput);
const [
indexBuffer,
routesBuffer,
initializerBuffer,
fixturesFolderExistence,
modelsFolderExists
] = await Promise.all([
fs.readFile(`${CWD}/memserver/index.ts`),
fs.readFile(`${CWD}/memserver/routes.ts`),
fs.readFile(`${CWD}/memserver/initializer.ts`),
pathExists(`${CWD}/memserver/fixtures`),
pathExists(`${CWD}/memserver/models`)
]);
const [
targetIndexFileBuffer,
targetRoutesFileBuffer,
targetInitializerBuffer
] = await Promise.all([
fs.readFile(`${PKG_PATH}/memserver-boilerplate/index.ts`),
fs.readFile(`${PKG_PATH}/memserver-boilerplate/routes.ts`),
fs.readFile(`${PKG_PATH}/memserver-boilerplate/initializer.ts`)
]);
assert.equal(indexBuffer.toString(), targetIndexFileBuffer.toString());
assert.equal(routesBuffer.toString(), targetRoutesFileBuffer.toString());
assert.equal(initializerBuffer.toString(), targetInitializerBuffer.toString());
assert.ok(fixturesFolderExistence);
assert.ok(modelsFolderExists);
});
});
async function pathExists(path) {
try {
await fs.access(path);
return true;
} catch {
return false;
}
}