diff --git a/.npmignore b/.npmignore index f0c9ab36..5612b3c3 100644 --- a/.npmignore +++ b/.npmignore @@ -6,6 +6,7 @@ docker docker-compose.yml test fixture +fixture-* coverage css html diff --git a/.putout.json b/.putout.json index f078d724..9a3ab59f 100644 --- a/.putout.json +++ b/.putout.json @@ -1,4 +1,7 @@ { + "ignore": [ + "fixture*" + ], "match": { "server": { "remove-process-exit": true diff --git a/client/dom/io.js b/client/dom/io.js index a82e312f..a93836de 100644 --- a/client/dom/io.js +++ b/client/dom/io.js @@ -87,11 +87,15 @@ module.exports.extract = async (data) => { }); }; -module.exports.mv = async (data) => { +module.exports.move = async (from, to, names) => { return await sendRequest({ method: 'PUT', - url: '/mv', - data, + url: '/move', + data: { + from, + to, + names, + }, imgPosition, }); }; diff --git a/client/dom/rest.js b/client/dom/rest.js index 810a16bd..5ac87d8d 100644 --- a/client/dom/rest.js +++ b/client/dom/rest.js @@ -29,7 +29,7 @@ module.exports.read = handleError(IO.read); module.exports.cp = handleError(IO.cp); module.exports.pack = handleError(IO.pack); module.exports.extract = handleError(IO.extract); -module.exports.mv = handleError(IO.mv); +module.exports.move = handleError(IO.move); module.exports.rename = handleError(IO.rename); module.exports.Config = { diff --git a/package.json b/package.json index acc57773..09fecce3 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "@cloudcmd/fileop": "^4.0.0", "@cloudcmd/move-files": "^3.0.0", "@cloudcmd/read-files-sync": "^2.0.0", + "@putout/plugin-cloudcmd": "^1.0.0", "apart": "^2.0.0", "chalk": "^4.0.0", "compression": "^1.7.4", diff --git a/server/fixture-user-menu/io-mv-fix.js b/server/fixture-user-menu/io-mv-fix.js new file mode 100644 index 00000000..c56998a8 --- /dev/null +++ b/server/fixture-user-menu/io-mv-fix.js @@ -0,0 +1,2 @@ +'use strict'; +await IO.move(dirPath, mp3Dir, mp3Names); diff --git a/server/fixture-user-menu/io-mv.js b/server/fixture-user-menu/io-mv.js new file mode 100644 index 00000000..8d11ed43 --- /dev/null +++ b/server/fixture-user-menu/io-mv.js @@ -0,0 +1,5 @@ +await IO.mv({ + from: dirPath, + to: mp3Dir, + names: mp3Names, +}); diff --git a/server/rest/index.js b/server/rest/index.js index d940acf5..7e6a644f 100644 --- a/server/rest/index.js +++ b/server/rest/index.js @@ -191,7 +191,7 @@ function onPUT({name, config, body}, callback) { const rootDir = config('root'); switch(cmd) { - case 'mv': { + case 'move': { const { from, to, diff --git a/server/user-menu.js b/server/user-menu.js index 4917327b..9e3878e7 100644 --- a/server/user-menu.js +++ b/server/user-menu.js @@ -101,6 +101,7 @@ function transpile(source) { plugins: [ 'convert-esm-to-commonjs', 'strict-mode', + 'cloudcmd', ], }); } diff --git a/server/user-menu.spec.js b/server/user-menu.spec.js index 2400e404..f74efeec 100644 --- a/server/user-menu.spec.js +++ b/server/user-menu.spec.js @@ -6,12 +6,23 @@ const {join} = require('path'); const test = require('supertape'); const serveOnce = require('serve-once'); const threadIt = require('thread-it'); +const stub = require('@cloudcmd/stub'); +const {reRequire} = require('mock-require'); const userMenu = require('./user-menu'); const {request} = serveOnce(userMenu); +const {readFileSync} = fs; + const userMenuPath = join(__dirname, '..', '.cloudcmd.menu.js'); -const userMenuFile = fs.readFileSync(userMenuPath, 'utf8'); +const userMenuFile = readFileSync(userMenuPath, 'utf8'); + +const fixtureDir = join(__dirname, 'fixture-user-menu'); +const fixtureMoveName = join(fixtureDir, 'io-mv.js'); +const fixtureMoveFixName = join(fixtureDir, 'io-mv-fix.js'); + +const fixtureMove = readFileSync(fixtureMoveName, 'utf8'); +const fixtureMoveFix = readFileSync(fixtureMoveFixName, 'utf8'); test('cloudcmd: user menu', async (t) => { const options = { @@ -28,3 +39,25 @@ test('cloudcmd: user menu', async (t) => { t.end(); }); +test.only('cloudcmd: user menu: io.mv', async (t) => { + const options = { + menuName: '.cloudcmd.menu.js', + }; + + 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(fixtureMoveFix, body, 'should equal'); + t.end(); +}); + diff --git a/test/rest/mv.js b/test/rest/move.js similarity index 83% rename from test/rest/mv.js rename to test/rest/move.js index 8329b9cf..89985130 100644 --- a/test/rest/mv.js +++ b/test/rest/move.js @@ -16,9 +16,9 @@ const restPath = dir + 'rest'; const {assign} = Object; -test('cloudcmd: rest: mv', async (t) => { +test('cloudcmd: rest: move', async (t) => { const volume = { - '/fixture/mv.txt': 'hello', + '/fixture/move.txt': 'hello', '/fixture/tmp/a.txt': 'a', }; @@ -52,21 +52,21 @@ test('cloudcmd: rest: mv', async (t) => { from: '/fixture/', to: '/fixture/tmp/', names: [ - 'mv.txt', + 'move.txt', ], }; - const {body} = await request.put(`/api/v1/mv`, { + const {body} = await request.put(`/api/v1/move`, { body: files, }); mockRequire.stop('fs'); - t.equal(body, 'move: ok("["mv.txt"]")', 'should move'); + t.equal(body, 'move: ok("["move.txt"]")', 'should move'); t.end(); }); -test('cloudcmd: rest: mv: no from', async (t) => { +test('cloudcmd: rest: move: no from', async (t) => { const cloudcmd = reRequire(cloudcmdPath); const {createConfigManager} = cloudcmd; @@ -80,7 +80,7 @@ test('cloudcmd: rest: mv: no from', async (t) => { const files = {}; - const {body} = await request.put(`/api/v1/mv`, { + const {body} = await request.put(`/api/v1/move`, { body: files, }); @@ -90,7 +90,7 @@ test('cloudcmd: rest: mv: no from', async (t) => { t.end(); }); -test('cloudcmd: rest: mv: no to', async (t) => { +test('cloudcmd: rest: move: no to', async (t) => { const cloudcmd = reRequire(cloudcmdPath); const {createConfigManager} = cloudcmd; @@ -106,7 +106,7 @@ test('cloudcmd: rest: mv: no to', async (t) => { from: '/', }; - const {body} = await request.put(`/api/v1/mv`, { + const {body} = await request.put(`/api/v1/move`, { body: files, });