0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00

Merge pull request #3424 from jgable/fixSettings

Fix lazy loading of settings
This commit is contained in:
Hannah Wolfe 2014-07-30 13:39:46 +01:00
commit 92805d70e1
6 changed files with 454 additions and 445 deletions

View file

@ -195,8 +195,9 @@ settingsResult = function (settings, type) {
populateDefaultSetting = function (key) { populateDefaultSetting = function (key) {
// Call populateDefault and update the settings cache // Call populateDefault and update the settings cache
return dataProvider.Settings.populateDefault(key).then(function (defaultSetting) { return dataProvider.Settings.populateDefault(key).then(function (defaultSetting) {
// Process the default result and add to settings cache // Process the default result and add to settings cache
var readResult = readSettingsResult(defaultSetting); var readResult = readSettingsResult([defaultSetting]);
// Add to the settings cache // Add to the settings cache
return updateSettingsCache(readResult).then(function () { return updateSettingsCache(readResult).then(function () {

View file

@ -35,7 +35,7 @@ logInfo = function logInfo(message) {
populateDefaultSettings = function populateDefaultSettings() { populateDefaultSettings = function populateDefaultSettings() {
// Initialise the default settings // Initialise the default settings
logInfo('Populating default settings'); logInfo('Populating default settings');
return models.Settings.populateDefaults().then(function () { return models.Settings.populateDefault('databaseVersion').then(function () {
logInfo('Complete'); logInfo('Complete');
}); });
}; };

View file

@ -20,6 +20,12 @@ function parseDefaultSettings() {
_.each(settings, function (setting, settingName) { _.each(settings, function (setting, settingName) {
setting.type = categoryName; setting.type = categoryName;
setting.key = settingName; setting.key = settingName;
// Special case for dbHash
if (setting.key === 'dbHash' && setting.defaultValue === null) {
setting.defaultValue = uuid.v4();
}
defaultSettingsFlattened[settingName] = setting; defaultSettingsFlattened[settingName] = setting;
}); });
}); });
@ -114,15 +120,11 @@ Settings = ghostBookshelf.Model.extend({
}, },
populateDefault: function (key) { populateDefault: function (key) {
if (!getDefaultSettings()[key]) { if (!getDefaultSettings()[key]) {
return when.reject(new errors.NotFoundError('Unable to find default setting: ' + key)); return when.reject(new errors.NotFoundError('Unable to find default setting: ' + key));
} }
// TOOD: databaseVersion and currentVersion special cases? return this.findOne({ key: key }).then(function (foundSetting) {
this.findOne({ key: key }).then(function (foundSetting) {
if (foundSetting) { if (foundSetting) {
return foundSetting; return foundSetting;
} }

View file

@ -19,437 +19,437 @@ var testUtils = require('../../utils'),
describe('Users API', function () { describe('Users API', function () {
// Keep the DB clean // Keep the DB clean
before(testUtils.teardown); before(testUtils.teardown);
afterEach(testUtils.teardown);
// TODO: remove settings once #3281 is fixed
beforeEach(testUtils.setup( 'users:roles', 'users', 'settings', 'perms:user', 'perms:role', 'perms:setting', 'perms:init'));
// it('dateTime fields are returned as Date objects', function (done) { beforeEach(testUtils.setup('users:roles', 'users', 'perms:user', 'perms:role', 'perms:setting', 'perms:init'));
// var userData = testUtils.DataGenerator.forModel.users[0]; afterEach(testUtils.teardown);
//
// UserModel.check({ email: userData.email, password: userData.password }).then(function (user) { it('dateTime fields are returned as Date objects', function (done) {
// return UserAPI.read({ id: user.id }); var userData = testUtils.DataGenerator.forModel.users[0];
// }).then(function (response) {
// response.users[0].created_at.should.be.an.instanceof(Date); UserModel.check({ email: userData.email, password: userData.password }).then(function (user) {
// response.users[0].updated_at.should.be.an.instanceof(Date); return UserAPI.read({ id: user.id });
// response.users[0].last_login.should.be.an.instanceof(Date); }).then(function (response) {
// response.users[0].created_at.should.be.an.instanceof(Date);
// done(); response.users[0].updated_at.should.be.an.instanceof(Date);
// }).catch(done); response.users[0].last_login.should.be.an.instanceof(Date);
// });
// done();
// describe('Browse', function () { }).catch(done);
// function checkBrowseResponse(response) { });
// should.exist(response);
// testUtils.API.checkResponse(response, 'users'); describe.skip('Browse', function () {
// should.exist(response.users); function checkBrowseResponse(response) {
// response.users.should.have.length(7); should.exist(response);
// testUtils.API.checkResponse(response.users[0], 'user', ['roles']); testUtils.API.checkResponse(response, 'users');
// testUtils.API.checkResponse(response.users[1], 'user', ['roles']); should.exist(response.users);
// testUtils.API.checkResponse(response.users[2], 'user', ['roles']); response.users.should.have.length(7);
// testUtils.API.checkResponse(response.users[3], 'user', ['roles']); testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
// } testUtils.API.checkResponse(response.users[1], 'user', ['roles']);
// testUtils.API.checkResponse(response.users[2], 'user', ['roles']);
// it('Owner can browse', function (done) { testUtils.API.checkResponse(response.users[3], 'user', ['roles']);
// UserAPI.browse(context.owner).then(function (response) { }
// checkBrowseResponse(response);
// done(); it('Owner can browse', function (done) {
// }).catch(done); UserAPI.browse(context.owner).then(function (response) {
// }); checkBrowseResponse(response);
// done();
// it('Admin can browse', function (done) { }).catch(done);
// UserAPI.browse(context.admin).then(function (response) { });
// checkBrowseResponse(response);
// done(); it('Admin can browse', function (done) {
// }).catch(done); UserAPI.browse(context.admin).then(function (response) {
// }); checkBrowseResponse(response);
// done();
// it('Editor can browse', function (done) { }).catch(done);
// UserAPI.browse(context.editor).then(function (response) { });
// checkBrowseResponse(response);
// done(); it('Editor can browse', function (done) {
// }).catch(done); UserAPI.browse(context.editor).then(function (response) {
// }); checkBrowseResponse(response);
// done();
// it('Author can browse', function (done) { }).catch(done);
// UserAPI.browse(context.author).then(function (response) { });
// checkBrowseResponse(response);
// done(); it('Author can browse', function (done) {
// }).catch(done); UserAPI.browse(context.author).then(function (response) {
// }); checkBrowseResponse(response);
// done();
// it('No-auth CANNOT browse', function (done) { }).catch(done);
// UserAPI.browse().then(function () { });
// done(new Error('Browse users is not denied without authentication.'));
// }, function () { it('No-auth CANNOT browse', function (done) {
// done(); UserAPI.browse().then(function () {
// }).catch(done); done(new Error('Browse users is not denied without authentication.'));
// }); }, function () {
// }); done();
// }).catch(done);
// describe('Read', function () { });
// function checkReadResponse(response) { });
// should.exist(response);
// should.not.exist(response.meta); describe.skip('Read', function () {
// should.exist(response.users); function checkReadResponse(response) {
// response.users[0].id.should.eql(1); should.exist(response);
// testUtils.API.checkResponse(response.users[0], 'user', ['roles']); should.not.exist(response.meta);
// response.users[0].created_at.should.be.a.Date; should.exist(response.users);
// } response.users[0].id.should.eql(1);
// testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
// it('Owner can read', function (done) { response.users[0].created_at.should.be.a.Date;
// UserAPI.read(_.extend({}, context.owner, {id: userIdFor.owner})).then(function (response) { }
// checkReadResponse(response);
// done(); it('Owner can read', function (done) {
// }).catch(done); UserAPI.read(_.extend({}, context.owner, {id: userIdFor.owner})).then(function (response) {
// }); checkReadResponse(response);
// done();
// }).catch(done);
// it('Admin can read', function (done) { });
// UserAPI.read(_.extend({}, context.admin, {id: userIdFor.owner})).then(function (response) {
// checkReadResponse(response);
// it('Admin can read', function (done) {
// done(); UserAPI.read(_.extend({}, context.admin, {id: userIdFor.owner})).then(function (response) {
// }).catch(done); checkReadResponse(response);
// });
// done();
// it('Editor can read', function (done) { }).catch(done);
// UserAPI.read(_.extend({}, context.editor, {id: userIdFor.owner})).then(function (response) { });
// checkReadResponse(response);
// done(); it('Editor can read', function (done) {
// }).catch(done); UserAPI.read(_.extend({}, context.editor, {id: userIdFor.owner})).then(function (response) {
// }); checkReadResponse(response);
// done();
// it('Author can read', function (done) { }).catch(done);
// UserAPI.read(_.extend({}, context.author, {id: userIdFor.owner})).then(function (response) { });
// checkReadResponse(response);
// done(); it('Author can read', function (done) {
// }).catch(done); UserAPI.read(_.extend({}, context.author, {id: userIdFor.owner})).then(function (response) {
// }); checkReadResponse(response);
// done();
// it('No-auth can read', function (done) { }).catch(done);
// UserAPI.read({id: userIdFor.owner}).then(function (response) { });
// checkReadResponse(response);
// done(); it('No-auth can read', function (done) {
// }).catch(done); UserAPI.read({id: userIdFor.owner}).then(function (response) {
// }); checkReadResponse(response);
// }); done();
// }).catch(done);
// describe('Edit', function () { });
// var newName = 'Jo McBlogger'; });
//
// function checkEditResponse(response) { describe.skip('Edit', function () {
// should.exist(response); var newName = 'Jo McBlogger';
// should.not.exist(response.meta);
// should.exist(response.users); function checkEditResponse(response) {
// response.users.should.have.length(1); should.exist(response);
// testUtils.API.checkResponse(response.users[0], 'user', ['roles']); should.not.exist(response.meta);
// response.users[0].name.should.equal(newName); should.exist(response.users);
// response.users[0].updated_at.should.be.a.Date; response.users.should.have.length(1);
// } testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
// response.users[0].name.should.equal(newName);
// it('Owner can edit all roles', function (done) { response.users[0].updated_at.should.be.a.Date;
// UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.owner})) }
// .then(function (response) {
// checkEditResponse(response); it('Owner can edit all roles', function (done) {
// UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.owner}))
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.admin})); .then(function (response) {
// }).then(function (response) { checkEditResponse(response);
//
// checkEditResponse(response); return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.admin}));
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.editor})); }).then(function (response) {
// }).then(function (response) {
// checkEditResponse(response); checkEditResponse(response);
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.editor}));
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.author})); }).then(function (response) {
// }).then(function (response) { checkEditResponse(response);
// checkEditResponse(response);
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.owner, {id: userIdFor.author}));
// done(); }).then(function (response) {
// }).catch(done); checkEditResponse(response);
// });
// done();
// it('Admin can edit all roles', function (done) { }).catch(done);
// UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.owner})) });
// .then(function (response) {
// checkEditResponse(response); it('Admin can edit all roles', function (done) {
// UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.owner}))
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.admin})); .then(function (response) {
// }).then(function (response) { checkEditResponse(response);
//
// checkEditResponse(response); return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.admin}));
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.editor})); }).then(function (response) {
// }).then(function (response) {
// checkEditResponse(response); checkEditResponse(response);
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.editor}));
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.author})); }).then(function (response) {
// }).then(function (response) { checkEditResponse(response);
// checkEditResponse(response);
// return UserAPI.edit({users: [{name: newName}]}, _.extend({}, context.admin, {id: userIdFor.author}));
// done(); }).then(function (response) {
// }).catch(done); checkEditResponse(response);
// });
// done();
// it('Editor CANNOT edit Owner, Admin or Editor roles', function (done) { }).catch(done);
// // Cannot edit Owner });
// UserAPI.edit(
// {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.owner}) it('Editor CANNOT edit Owner, Admin or Editor roles', function (done) {
// ).then(function () { // Cannot edit Owner
// done(new Error('Editor should not be able to edit owner account')); UserAPI.edit(
// }).catch(function (error) { {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.owner})
// error.type.should.eql('NoPermissionError'); ).then(function () {
// }).finally(function () { done(new Error('Editor should not be able to edit owner account'));
// // Cannot edit Admin }).catch(function (error) {
// UserAPI.edit( error.type.should.eql('NoPermissionError');
// {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.admin}) }).finally(function () {
// ).then(function () { // Cannot edit Admin
// done(new Error('Editor should not be able to edit admin account')); UserAPI.edit(
// }).catch(function (error) { {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.admin})
// error.type.should.eql('NoPermissionError'); ).then(function () {
// }).finally(function () { done(new Error('Editor should not be able to edit admin account'));
// // Cannot edit Editor }).catch(function (error) {
// UserAPI.edit( error.type.should.eql('NoPermissionError');
// {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.editor2}) }).finally(function () {
// ).then(function () { // Cannot edit Editor
// done(new Error('Editor should not be able to edit other editor account')); UserAPI.edit(
// }).catch(function (error) { {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.editor2})
// error.type.should.eql('NoPermissionError'); ).then(function () {
// done(); done(new Error('Editor should not be able to edit other editor account'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// }); done();
// }); });
// });
// it('Editor can edit self or Author role', function (done) { });
// // Can edit self });
// UserAPI.edit(
// {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.editor}) it('Editor can edit self or Author role', function (done) {
// ).then(function (response) { // Can edit self
// checkEditResponse(response); UserAPI.edit(
// // Can edit Author {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.editor})
// return UserAPI.edit( ).then(function (response) {
// {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.author}) checkEditResponse(response);
// ); // Can edit Author
// }).then(function (response) { return UserAPI.edit(
// checkEditResponse(response); {users: [{name: newName}]}, _.extend({}, context.editor, {id: userIdFor.author})
// done(); );
// }).catch(done); }).then(function (response) {
// }); checkEditResponse(response);
// done();
// it('Author CANNOT edit all roles', function (done) { }).catch(done);
// // Cannot edit owner });
// UserAPI.edit(
// {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.owner}) it('Author CANNOT edit all roles', function (done) {
// ).then(function () { // Cannot edit owner
// done(new Error('Editor should not be able to edit owner account')); UserAPI.edit(
// }).catch(function (error) { {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.owner})
// error.type.should.eql('NoPermissionError'); ).then(function () {
// }).finally(function () { done(new Error('Editor should not be able to edit owner account'));
// // Cannot edit admin }).catch(function (error) {
// UserAPI.edit( error.type.should.eql('NoPermissionError');
// {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.admin}) }).finally(function () {
// ).then(function () { // Cannot edit admin
// done(new Error('Editor should not be able to edit admin account')); UserAPI.edit(
// }).catch(function (error) { {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.admin})
// error.type.should.eql('NoPermissionError'); ).then(function () {
// }).finally(function () { done(new Error('Editor should not be able to edit admin account'));
// UserAPI.edit( }).catch(function (error) {
// {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.author2}) error.type.should.eql('NoPermissionError');
// ).then(function () { }).finally(function () {
// done(new Error('Author should not be able to edit author account which is not their own')); UserAPI.edit(
// }).catch(function (error) { {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.author2})
// error.type.should.eql('NoPermissionError'); ).then(function () {
// done(); done(new Error('Author should not be able to edit author account which is not their own'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// }); done();
// }); });
// });
// it('Author can edit self', function (done) { });
// // Next test that author CAN edit self });
// UserAPI.edit(
// {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.author}) it('Author can edit self', function (done) {
// ).then(function (response) { // Next test that author CAN edit self
// checkEditResponse(response); UserAPI.edit(
// done(); {users: [{name: newName}]}, _.extend({}, context.author, {id: userIdFor.author})
// }).catch(done); ).then(function (response) {
// }); checkEditResponse(response);
// }); done();
// }).catch(done);
// describe('Add', function () { });
// var newUser; });
//
// beforeEach(function () { describe.skip('Add', function () {
// newUser = _.clone(testUtils.DataGenerator.forKnex.createUser(testUtils.DataGenerator.Content.users[4])); var newUser;
//
// sandbox.stub(UserModel, 'gravatarLookup', function (userData) { beforeEach(function () {
// return when.resolve(userData); newUser = _.clone(testUtils.DataGenerator.forKnex.createUser(testUtils.DataGenerator.Content.users[4]));
// });
// sandbox.stub(UserModel, 'gravatarLookup', function (userData) {
// sandbox.stub(mail, 'send', function () { return when.resolve(userData);
// return when.resolve(); });
// });
// }); sandbox.stub(mail, 'send', function () {
// afterEach(function () { return when.resolve();
// sandbox.restore(); });
// }); });
// afterEach(function () {
// function checkAddResponse(response) { sandbox.restore();
// should.exist(response); });
// should.exist(response.users);
// should.not.exist(response.meta); function checkAddResponse(response) {
// response.users.should.have.length(1); should.exist(response);
// testUtils.API.checkResponse(response.users[0], 'user', ['roles']); should.exist(response.users);
// response.users[0].created_at.should.be.a.Date; should.not.exist(response.meta);
// } response.users.should.have.length(1);
// testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
// describe('Owner', function () { response.users[0].created_at.should.be.a.Date;
// it('CANNOT add an Owner', function (done) { }
// newUser.roles = [roleIdFor.owner];
// // Owner cannot add owner describe('Owner', function () {
// UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'})) it('CANNOT add an Owner', function (done) {
// .then(function () { newUser.roles = [roleIdFor.owner];
// done(new Error('Owner should not be able to add an owner')); // Owner cannot add owner
// }).catch(function (error) { UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'}))
// error.type.should.eql('NoPermissionError'); .then(function () {
// done(); done(new Error('Owner should not be able to add an owner'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// done();
// it('Can add an Admin', function (done) { });
// // Can add admin });
// newUser.roles = [roleIdFor.admin];
// UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'})) it('Can add an Admin', function (done) {
// .then(function (response) { // Can add admin
// checkAddResponse(response); newUser.roles = [roleIdFor.admin];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Administrator'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Administrator');
// done();
// it('Can add an Editor', function (done) { }).catch(done);
// // Can add editor });
// newUser.roles = [roleIdFor.editor];
// UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'})) it('Can add an Editor', function (done) {
// .then(function (response) { // Can add editor
// checkAddResponse(response); newUser.roles = [roleIdFor.editor];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Editor'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Editor');
// it('Can add an Author', function (done) { done();
// // Can add author }).catch(done);
// newUser.roles = [roleIdFor.author]; });
// UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'})) it('Can add an Author', function (done) {
// .then(function (response) { // Can add author
// checkAddResponse(response); newUser.roles = [roleIdFor.author];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.owner, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Author'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Author');
// }); done();
// }).catch(done);
// describe('Admin', function () { });
// it('CANNOT add an Owner', function (done) { });
// newUser.roles = [roleIdFor.owner];
// // Admin cannot add owner describe('Admin', function () {
// UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'})) it('CANNOT add an Owner', function (done) {
// .then(function () { newUser.roles = [roleIdFor.owner];
// done(new Error('Admin should not be able to add an owner')); // Admin cannot add owner
// }).catch(function (error) { UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'}))
// error.type.should.eql('NoPermissionError'); .then(function () {
// done(); done(new Error('Admin should not be able to add an owner'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// it('Can add an Admin', function (done) { done();
// // Can add admin });
// newUser.roles = [roleIdFor.admin]; });
// UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'})) it('Can add an Admin', function (done) {
// .then(function (response) { // Can add admin
// checkAddResponse(response); newUser.roles = [roleIdFor.admin];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Administrator'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Administrator');
// done();
// it('Can add an Editor', function (done) { }).catch(done);
// // Can add editor });
// newUser.roles = [roleIdFor.editor];
// UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'})) it('Can add an Editor', function (done) {
// .then(function (response) { // Can add editor
// checkAddResponse(response); newUser.roles = [roleIdFor.editor];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Editor'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Editor');
// done();
// it('Can add an Author', function (done) { }).catch(done);
// // Can add author });
// newUser.roles = [roleIdFor.author];
// UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'})) it('Can add an Author', function (done) {
// .then(function (response) { // Can add author
// checkAddResponse(response); newUser.roles = [roleIdFor.author];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.admin, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Author'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Author');
// }); done();
// }).catch(done);
// describe('Editor', function () { });
// it('CANNOT add an Owner', function (done) { });
// newUser.roles = [roleIdFor.owner];
// // Editor cannot add owner describe('Editor', function () {
// UserAPI.add({users: [newUser]}, _.extend({}, context.editor, {include: 'roles'})) it('CANNOT add an Owner', function (done) {
// .then(function () { newUser.roles = [roleIdFor.owner];
// done(new Error('Editor should not be able to add an owner')); // Editor cannot add owner
// }).catch(function (error) { UserAPI.add({users: [newUser]}, _.extend({}, context.editor, {include: 'roles'}))
// error.type.should.eql('NoPermissionError'); .then(function () {
// done(); done(new Error('Editor should not be able to add an owner'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// done();
// it('Can add an Author', function (done) { });
// newUser.roles = [roleIdFor.author]; });
// UserAPI.add({users: [newUser]}, _.extend({}, context.editor, {include: 'roles'}))
// .then(function (response) { it('Can add an Author', function (done) {
// checkAddResponse(response); newUser.roles = [roleIdFor.author];
// response.users[0].id.should.eql(8); UserAPI.add({users: [newUser]}, _.extend({}, context.editor, {include: 'roles'}))
// response.users[0].roles[0].name.should.equal('Author'); .then(function (response) {
// done(); checkAddResponse(response);
// }).catch(done); response.users[0].id.should.eql(8);
// }); response.users[0].roles[0].name.should.equal('Author');
// }); done();
// }).catch(done);
// describe('Author', function () { });
// it('CANNOT add an Owner', function (done) { });
// newUser.roles = [roleIdFor.owner];
// // Admin cannot add owner describe('Author', function () {
// UserAPI.add({users: [newUser]}, _.extend({}, context.author, {include: 'roles'})) it('CANNOT add an Owner', function (done) {
// .then(function () { newUser.roles = [roleIdFor.owner];
// done(new Error('Author should not be able to add an owner')); // Admin cannot add owner
// }).catch(function (error) { UserAPI.add({users: [newUser]}, _.extend({}, context.author, {include: 'roles'}))
// error.type.should.eql('NoPermissionError'); .then(function () {
// done(); done(new Error('Author should not be able to add an owner'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// done();
// it('CANNOT add an Author', function (done) { });
// newUser.roles = [roleIdFor.author]; });
// UserAPI.add({users: [newUser]}, _.extend({}, context.author, {include: 'roles'}))
// .then(function () { it('CANNOT add an Author', function (done) {
// done(new Error('Author should not be able to add an author')); newUser.roles = [roleIdFor.author];
// }).catch(function (error) { UserAPI.add({users: [newUser]}, _.extend({}, context.author, {include: 'roles'}))
// error.type.should.eql('NoPermissionError'); .then(function () {
// done(); done(new Error('Author should not be able to add an author'));
// }); }).catch(function (error) {
// }); error.type.should.eql('NoPermissionError');
// }); done();
// }); });
});
});
});
describe('Destroy', function () { describe('Destroy', function () {
function checkDestroyResponse(response) { function checkDestroyResponse(response) {
@ -466,11 +466,11 @@ describe('Users API', function () {
it('CANNOT destroy self', function (done) { it('CANNOT destroy self', function (done) {
UserAPI.destroy(_.extend({}, context.owner, {id: userIdFor.owner})) UserAPI.destroy(_.extend({}, context.owner, {id: userIdFor.owner}))
.then(function () { .then(function () {
done(new Error('Owner should not be able to delete itself')); done(new Error('Owner should not be able to delete itself'));
}).catch(function (error) { }).catch(function (error) {
error.type.should.eql('NoPermissionError'); error.type.should.eql('NoPermissionError');
done(); done();
}); });
}); });
it('Can destroy admin, editor, author', function (done) { it('Can destroy admin, editor, author', function (done) {

View file

@ -30,7 +30,8 @@ describe('Exporter', function () {
exporter().then(function (exportData) { exporter().then(function (exportData) {
var tables = ['posts', 'users', 'roles', 'roles_users', 'permissions', 'permissions_roles', var tables = ['posts', 'users', 'roles', 'roles_users', 'permissions', 'permissions_roles',
'permissions_users', 'settings', 'tags', 'posts_tags']; 'permissions_users', 'settings', 'tags', 'posts_tags'],
dbVersionSetting;
should.exist(exportData); should.exist(exportData);
@ -38,7 +39,12 @@ describe('Exporter', function () {
should.exist(exportData.data); should.exist(exportData.data);
exportData.meta.version.should.equal('003'); exportData.meta.version.should.equal('003');
_.findWhere(exportData.data.settings, {key: 'databaseVersion'}).value.should.equal('003');
dbVersionSetting = _.findWhere(exportData.data.settings, {key: 'databaseVersion'});
should.exist(dbVersionSetting);
dbVersionSetting.value.should.equal('003');
_.each(tables, function (name) { _.each(tables, function (name) {
should.exist(exportData.data[name]); should.exist(exportData.data[name]);

View file

@ -332,7 +332,7 @@ setup = function setup() {
fixtureOps = getFixtureOps(options); fixtureOps = getFixtureOps(options);
return function (done) { return function (done) {
return sequence(fixtureOps).then(function () { return sequence(fixtureOps).then(function () {
done(); done();
}).catch(done); }).catch(done);
}; };