diff --git a/src/widgets/index.js b/src/widgets/index.js index 30f2791afa..968a5e7a9e 100644 --- a/src/widgets/index.js +++ b/src/widgets/index.js @@ -218,34 +218,31 @@ widgets.reset = function (callback) { }; widgets.resetTemplate = function (template, callback) { - db.getObject('widgets:' + template + '.tpl', function (err, area) { - if (err) { - return callback(); - } - - var toBeDrafted = []; - for (var location in area) { - if (area.hasOwnProperty(location)) { - toBeDrafted = toBeDrafted.concat(JSON.parse(area[location])); - } - } - - db.delete('widgets:' + template + '.tpl'); - db.getObjectField('widgets:global', 'drafts', function (err, draftWidgets) { - if (err) { - return callback(); + var toBeDrafted = []; + async.waterfall([ + function (next) { + db.getObject('widgets:' + template + '.tpl', next); + }, + function (area, next) { + for (var location in area) { + if (area.hasOwnProperty(location)) { + toBeDrafted = toBeDrafted.concat(JSON.parse(area[location])); + } } - + db.delete('widgets:' + template + '.tpl', next); + }, + function (next) { + db.getObjectField('widgets:global', 'drafts', next); + }, + function (draftWidgets, next) { draftWidgets = JSON.parse(draftWidgets).concat(toBeDrafted); - db.setObjectField('widgets:global', 'drafts', JSON.stringify(draftWidgets), callback); - }); - }); + db.setObjectField('widgets:global', 'drafts', JSON.stringify(draftWidgets), next); + }, + ], callback); }; widgets.resetTemplates = function (templates, callback) { - async.eachSeries(templates, function (template, next) { - widgets.resetTemplate(template, next); - }, callback); + async.eachSeries(templates, widgets.resetTemplate, callback); }; module.exports = widgets; diff --git a/test/controllers.js b/test/controllers.js index 04343b6d18..c4c46ac38d 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -702,7 +702,7 @@ describe('Controllers', function () { assert.ifError(err); assert.equal(res.statusCode, 200); assert(body.widgets); - assert.equal(Object.keys(body.widgets), 0); + assert.equal(Object.keys(body.widgets).length, 0); done(); }); }); @@ -717,6 +717,19 @@ describe('Controllers', function () { done(); }); }); + + it('should reset templates', function (done) { + widgets.resetTemplates(['categories', 'category'], function (err) { + assert.ifError(err); + request(nconf.get('url') + '/api/categories', { json: true }, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body.widgets); + assert.equal(Object.keys(body.widgets).length, 0); + done(); + }); + }); + }); }); describe('tags', function () {