diff --git a/src/backups.js b/src/backups.js index e93bc4c26..1463e9cfc 100644 --- a/src/backups.js +++ b/src/backups.js @@ -27,7 +27,9 @@ exports = module.exports = { // for testing _getBackupFilePath: getBackupFilePath, _createTarPackStream: createTarPackStream, - _tarExtract: tarExtract + _tarExtract: tarExtract, + _createEmptyDirs: createEmptyDirs, + _saveEmptyDirs: saveEmptyDirs }; var addons = require('./addons.js'), @@ -345,7 +347,7 @@ function createEmptyDirs(appDataDir, callback) { if (emptyDirs === null) return callback(new Error('emptydirs.txt was not found:' + safe.error.message)); async.eachSeries(emptyDirs.trim().split('\n'), function createPath(emptyDir, iteratorDone) { - mkdirp(path.join(appDataDir, 'data', emptyDir), iteratorDone); + mkdirp(path.join(appDataDir, emptyDir), iteratorDone); }, callback); } diff --git a/src/test/backups-test.js b/src/test/backups-test.js index 7d8dde73e..c0bc2dd1b 100644 --- a/src/test/backups-test.js +++ b/src/test/backups-test.js @@ -9,9 +9,14 @@ var async = require('async'), backupdb = require('../backupdb.js'), backups = require('../backups.js'), + createTree = require('./common.js').createTree, database = require('../database'), DatabaseError = require('../databaseerror.js'), expect = require('expect.js'), + fs = require('fs'), + os = require('os'), + path = require('path'), + rimraf = require('rimraf'), settings = require('../settings.js'); describe('backups', function () { @@ -167,4 +172,41 @@ describe('backups', function () { }); }); }); + + describe('empty dirs', function () { + var tmpdir; + before(function () { + tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'backups-test')); + }); + after(function () { + rimraf.sync(tmpdir); + }); + + it('saves empty dirs file', function (done) { + createTree(tmpdir, { 'data': { 'subdir': { 'emptydir': { } } }, 'dir2': { 'file': 'stuff' } }); + + backups._saveEmptyDirs(tmpdir, function (error) { + expect(error).to.not.be.ok(); + + var emptyDirs = fs.readFileSync(path.join(tmpdir, 'emptydirs.txt'), 'utf8').trim().split('\n'); + expect(emptyDirs).to.eql(['./data/subdir/emptydir']); + + done(); + }); + }); + + it('creates empty dirs file', function (done) { + rimraf.sync(path.join(tmpdir, 'data')); + + expect(fs.existsSync(path.join(tmpdir, 'data/subdir/emptydir'))).to.be(false); // just make sure rimraf worked + + backups._createEmptyDirs(tmpdir, function (error) { + expect(error).to.not.be.ok(); + + expect(fs.existsSync(path.join(tmpdir, 'data/subdir/emptydir'))).to.be(true); + + done(); + }); + }); + }); });