feature: user-menu: get rid of mock-require

This commit is contained in:
coderaiser 2024-03-22 16:57:29 +02:00
parent 4e32241d83
commit 401a669aca
3 changed files with 13 additions and 21 deletions

View file

@ -188,6 +188,7 @@
"memfs": "^4.2.0",
"minor": "^1.2.2",
"mock-require": "^3.0.1",
"montag": "^1.2.1",
"morgan": "^1.6.1",
"multi-rename": "^2.0.0",
"nodemon": "^3.0.1",

View file

@ -1,7 +1,8 @@
'use strict';
const once = require('once');
const {homedir} = require('node:os');
const {readFile} = require('node:fs/promises');
const {readFile: _readFile, readFile} = require('node:fs/promises');
const {join} = require('node:path');
@ -13,13 +14,14 @@ const {codeframe} = require('putout');
const putout = threadIt(require.resolve('putout'));
threadIt.init();
// warm up worker cache
transpile('');
const URL = '/api/v1/user-menu';
const DEFAULT_MENU_PATH = join(__dirname, '../static/user-menu.js');
module.exports = currify(async ({menuName}, req, res, next) => {
module.exports = currify(async ({menuName, readFile = _readFile}, req, res, next) => {
if (req.url.indexOf(URL))
return next();
@ -30,12 +32,13 @@ module.exports = currify(async ({menuName}, req, res, next) => {
req,
res,
menuName,
readFile,
});
next();
});
async function onGET({req, res, menuName}) {
async function onGET({req, res, menuName, readFile}) {
const {dir} = req.query;
const url = req.url.replace(URL, '');
@ -65,6 +68,7 @@ async function onGET({req, res, menuName}) {
if (e)
return sendDefaultMenu(res);
debugger;
const [parseError, result] = await transpile(source);
if (parseError)
@ -108,3 +112,4 @@ async function transpile(source) {
],
});
}

View file

@ -7,11 +7,9 @@ const {test, stub} = require('supertape');
const serveOnce = require('serve-once');
const threadIt = require('thread-it');
const {reRequire} = require('mock-require');
const userMenu = require('./user-menu');
const {request} = serveOnce(userMenu);
const {readFileSync} = fs;
const userMenuPath = join(__dirname, '..', '.cloudcmd.menu.js');
@ -37,51 +35,39 @@ test('cloudcmd: user menu', async (t) => {
options,
});
threadIt.terminate();
t.equal(userMenuFile, body);
t.end();
});
test('cloudcmd: user menu: io.mv', async (t) => {
const readFile = stub().returns(fixtureMove);
const options = {
menuName: '.cloudcmd.menu.js',
readFile,
};
const {readFile} = fs.promises;
fs.promises.readFile = stub().returns(fixtureMove);
const userMenu = reRequire('./user-menu');
const {request} = serveOnce(userMenu);
const {body} = await request.get(`/api/v1/user-menu?dir=${__dirname}`, {
options,
});
threadIt.terminate();
fs.promises.readFile = readFile;
t.equal(body, fixtureMoveFix);
t.end();
});
test('cloudcmd: user menu: io.cp', async (t) => {
const readFile = stub().returns(fixtureCopy);
const options = {
menuName: '.cloudcmd.menu.js',
readFile,
};
const {readFile} = fs.promises;
fs.promises.readFile = stub().returns(fixtureCopy);
const userMenu = reRequire('./user-menu');
const {request} = serveOnce(userMenu);
const {body} = await request.get(`/api/v1/user-menu?dir=${__dirname}`, {
options,
});
threadIt.terminate();
fs.promises.readFile = readFile;
t.equal(body, fixtureCopyFix);
t.end();