diff --git a/server/rest.js b/server/rest.js index 00790fd4..e786b38d 100644 --- a/server/rest.js +++ b/server/rest.js @@ -12,8 +12,9 @@ const markdown = require(DIR + 'markdown'); const jaguar = require('jaguar'); const onezip = require('onezip'); const inly = require('inly'); -const flop = require('flop'); const pullout = require('pullout/legacy'); +const promisify = require('es6-promisify').promisify; +const move = promisify(require('flop').move); const ponse = require('ponse'); const copymitter = require('copymitter'); const json = require('jonny'); @@ -181,7 +182,7 @@ function onPUT(name, body, callback) { files.from = root(files.from); files.to = root(files.to); - copyFiles(files, flop.move, (error) => { + moveFiles(files, (error) => { const data = !files.names ? files : files.names.slice(); const msg = formatMsg('move', data); @@ -303,8 +304,8 @@ function copy(from, to, names, fn) { }); } -function copyFiles(files, processFunc, callback) { - let names = files.names; +function moveFiles(files, callback) { + let names = files.names.slice(); const copy = () => { let isLast; @@ -325,17 +326,13 @@ function copyFiles(files, processFunc, callback) { if (isLast) return callback(); - processFunc(from, to, error => { - if (error) - return callback(error); - - copy(); - }); + move(from, to) + .then(copy) + .catch(callback); }; check .type('callback', callback, 'function') - .type('processFunc', processFunc, 'function') .check({ files, }); diff --git a/test/fixture/mv.txt b/test/fixture/mv.txt new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/test/fixture/mv.txt @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/test/rest/mv.js b/test/rest/mv.js new file mode 100644 index 00000000..47ec7228 --- /dev/null +++ b/test/rest/mv.js @@ -0,0 +1,54 @@ +'use strict'; + +const { + join, +} = require('path'); +const fs = require('fs'); +const test = require('tape'); +const {promisify} = require('es6-promisify'); +const pullout = require('pullout'); +const request = require('request'); +const before = require('../before'); +const rimraf = require('rimraf'); + +const fixtureDir = join(__dirname, '..', 'fixture') + '/'; + +const warp = (fn, ...a) => (...b) => fn(...b, ...a); +const _pullout = promisify(pullout); + +const put = promisify((url, json, fn) => { + fn(null, request.put(url, { + json, + })); +}); + +test('cloudcmd: rest: mv', (t) => { + before({}, (port, after) => { + const tmp = join(fixtureDir, 'tmp'); + const files = { + from: '/fixture/', + to: '/fixture/tmp/', + names: [ + 'mv.txt' + ] + }; + + fs.mkdirSync(tmp); + + put(`http://localhost:${port}/api/v1/mv`, files) + .then(warp(_pullout, 'string')) + .then((body) => { + t.equal(body, 'move: ok("["mv.txt"]")', 'should move'); + t.end(); + + const file = fs.readFileSync(`${tmp}/mv.txt`); + fs.writeFileSync(`${fixtureDir}/mv.txt`, file); + + rimraf.sync(tmp); + + after(); + }) + .catch(console.error); + }); +}); +