diff --git a/src/backupdb.js b/src/backupdb.js index 4d2f52553..801be3e01 100644 --- a/src/backupdb.js +++ b/src/backupdb.js @@ -3,9 +3,10 @@ var assert = require('assert'), database = require('./database.js'), DatabaseError = require('./databaseerror.js'), + safe = require('safetydance'), util = require('util'); -var BACKUPS_FIELDS = [ 'id', 'creationTime', 'version', 'type', 'dependsOn', 'state', ]; +var BACKUPS_FIELDS = [ 'id', 'creationTime', 'version', 'type', 'dependsOn', 'state', 'restoreConfigJson' ]; exports = module.exports = { add: add, @@ -26,6 +27,9 @@ function postProcess(result) { assert.strictEqual(typeof result, 'object'); result.dependsOn = result.dependsOn ? result.dependsOn.split(',') : [ ]; + + result.restoreConfig = result.restoreConfigJson ? safe.JSON.parse(result.restoreConfigJson) : null; + delete result.restoreConfigJson; } function getPaged(page, perPage, callback) { @@ -81,12 +85,14 @@ function add(backup, callback) { assert.strictEqual(typeof backup.version, 'string'); assert(backup.type === exports.BACKUP_TYPE_APP || backup.type === exports.BACKUP_TYPE_BOX); assert(util.isArray(backup.dependsOn)); + assert.strictEqual(typeof backup.restoreConfig, 'object'); assert.strictEqual(typeof callback, 'function'); var creationTime = backup.creationTime || new Date(); // allow tests to set the time + var restoreConfig = backup.restoreConfig ? JSON.stringify(backup.restoreConfig) : ''; - database.query('INSERT INTO backups (id, version, type, creationTime, state, dependsOn) VALUES (?, ?, ?, ?, ?, ?)', - [ backup.id, backup.version, backup.type, creationTime, exports.BACKUP_STATE_NORMAL, backup.dependsOn.join(',') ], + database.query('INSERT INTO backups (id, version, type, creationTime, state, dependsOn, restoreConfigJson) VALUES (?, ?, ?, ?, ?, ?, ?)', + [ backup.id, backup.version, backup.type, creationTime, exports.BACKUP_STATE_NORMAL, backup.dependsOn.join(','), restoreConfig ], function (error) { if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); diff --git a/src/test/database-test.js b/src/test/database-test.js index 466041eb3..6a1516ada 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -1020,7 +1020,8 @@ describe('database', function () { id: 'backup-box', version: '1.0.0', type: backupdb.BACKUP_TYPE_BOX, - dependsOn: [ 'dep1' ] + dependsOn: [ 'dep1' ], + restoreConfig: null }; backupdb.add(backup, function (error) { @@ -1036,6 +1037,7 @@ describe('database', function () { expect(result.type).to.be(backupdb.BACKUP_TYPE_BOX); expect(result.creationTime).to.be.a(Date); expect(result.dependsOn).to.eql(['dep1']); + expect(result.restoreConfig).to.eql(null); done(); }); }); @@ -1058,6 +1060,7 @@ describe('database', function () { expect(results[0].id).to.be('backup-box'); expect(results[0].version).to.be('1.0.0'); expect(results[0].dependsOn).to.eql(['dep1']); + expect(results[0].restoreConfig).to.eql(null); done(); }); @@ -1082,7 +1085,8 @@ describe('database', function () { id: 'app_appid_123', version: '1.0.0', type: backupdb.BACKUP_TYPE_APP, - dependsOn: [ ] + dependsOn: [ ], + restoreConfig: { manifest: { foo: 'bar' } } }; backupdb.add(backup, function (error) { @@ -1098,6 +1102,7 @@ describe('database', function () { expect(result.type).to.be(backupdb.BACKUP_TYPE_APP); expect(result.creationTime).to.be.a(Date); expect(result.dependsOn).to.eql([]); + expect(result.restoreConfig).to.eql({ manifest: { foo: 'bar' } }); done(); }); }); @@ -1111,6 +1116,7 @@ describe('database', function () { expect(results[0].id).to.be('app_appid_123'); expect(results[0].version).to.be('1.0.0'); expect(results[0].dependsOn).to.eql([]); + expect(results[0].restoreConfig).to.eql({ manifest: { foo: 'bar' } }); done(); });