cloudcmd/test/rest/move.js
2024-03-11 16:16:58 +02:00

142 lines
3.2 KiB
JavaScript

'use strict';
const fs = require('fs');
const test = require('supertape');
const {Volume} = require('memfs');
const {ufs} = require('unionfs');
const mockRequire = require('mock-require');
const serveOnce = require('serve-once');
const {reRequire, stopAll} = mockRequire;
const cloudcmdPath = '../../';
const dir = `${cloudcmdPath}server/`;
const restPath = `${dir}rest`;
const {assign} = Object;
test('cloudcmd: rest: move', async (t) => {
const volume = {
'/fixture/move.txt': 'hello',
'/fixture/tmp/a.txt': 'a',
};
const vol = Volume.fromJSON(volume, '/');
const unionFS = ufs
.use(vol)
.use(fs);
assign(unionFS, {
promises: fs.promises,
});
mockRequire('fs', unionFS);
reRequire('@cloudcmd/rename-files');
reRequire('@cloudcmd/move-files');
reRequire(restPath);
const cloudcmd = reRequire(cloudcmdPath);
const {createConfigManager} = cloudcmd;
const configManager = createConfigManager();
configManager('auth', false);
configManager('root', '/');
const {request} = serveOnce(cloudcmd, {
configManager,
});
const files = {
from: '/fixture/',
to: '/fixture/tmp/',
names: ['move.txt'],
};
const {body} = await request.put(`/api/v1/move`, {
body: files,
});
stopAll();
t.equal(body, 'move: ok("["move.txt"]")', 'should move');
t.end();
});
test('cloudcmd: rest: move: no from', async (t) => {
const cloudcmd = reRequire(cloudcmdPath);
const {createConfigManager} = cloudcmd;
const configManager = createConfigManager();
configManager('auth', false);
configManager('root', '/');
const {request} = serveOnce(cloudcmd, {
configManager,
});
const files = {};
const {body} = await request.put(`/api/v1/move`, {
body: files,
});
const expected = '"from" should be filled';
t.equal(body, expected);
t.end();
});
test('cloudcmd: rest: move: no to', async (t) => {
const cloudcmd = reRequire(cloudcmdPath);
const {createConfigManager} = cloudcmd;
const configManager = createConfigManager();
configManager('auth', false);
configManager('root', '/');
const {request} = serveOnce(cloudcmd, {
configManager,
});
const files = {
from: '/',
};
const {body} = await request.put(`/api/v1/move`, {
body: files,
});
const expected = '"to" should be filled';
t.equal(body, expected);
t.end();
});
test('cloudcmd: rest: readonly', async (t) => {
const cloudcmd = reRequire(cloudcmdPath);
const {createConfigManager} = cloudcmd;
const configManager = createConfigManager();
configManager('auth', false);
configManager('root', '/');
configManager('readonly', true);
const {request} = serveOnce(cloudcmd, {
configManager,
});
const files = {
from: '/',
};
const {body} = await request.put(`/api/v1/move`, {
body: files,
});
const expected = '"readonly" mode enabled';
t.equal(body, expected);
t.end();
});