0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Merge pull request #5431 from kowsheek/5370-settings-model-events

Add events to settings model
This commit is contained in:
Hannah Wolfe 2015-06-16 20:46:15 +01:00
commit 3061247a7e
3 changed files with 42 additions and 1 deletions

View file

@ -5,6 +5,7 @@ var Settings,
errors = require('../errors'),
Promise = require('bluebird'),
validation = require('../data/validation'),
events = require('../events'),
internal = {context: {internal: true}},
defaultSettings;
@ -49,6 +50,24 @@ Settings = ghostBookshelf.Model.extend({
};
},
emitChange: function emitChange(event) {
events.emit('settings' + '.' + event, this);
},
initialize: function initialize() {
ghostBookshelf.Model.prototype.initialize.apply(this, arguments);
this.on('created', function (model) {
model.emitChange('added');
});
this.on('updated', function (model) {
model.emitChange('edited');
});
this.on('destroyed', function (model) {
model.emitChange('deleted');
});
},
validate: function validate() {
var self = this,
setting = this.toJSON();

View file

@ -2,13 +2,18 @@
/*jshint expr:true*/
var testUtils = require('../../utils'),
should = require('should'),
sinon = require('sinon'),
// Stuff we are testing
SettingsModel = require('../../../server/models/settings').Settings,
config = require('../../../server/config'),
events = require('../../../server/events'),
sandbox = sinon.sandbox.create(),
context = testUtils.context.admin;
describe('Settings Model', function () {
var eventSpy;
// Keep the DB clean
before(testUtils.teardown);
afterEach(testUtils.teardown);
@ -18,6 +23,14 @@ describe('Settings Model', function () {
should.exist(SettingsModel);
});
afterEach(function () {
sandbox.restore();
});
beforeEach(function () {
eventSpy = sandbox.spy(events, 'emit');
});
describe('API', function () {
it('can findAll', function (done) {
SettingsModel.findAll().then(function (results) {
@ -67,6 +80,9 @@ describe('Settings Model', function () {
edited.attributes.key.should.equal('description');
edited.attributes.value.should.equal('new value');
eventSpy.calledOnce.should.be.true;
eventSpy.calledWith('settings.edited').should.be.true;
done();
}).catch(done);
});
@ -100,6 +116,9 @@ describe('Settings Model', function () {
editedModel.attributes.key.should.equal(model2.key);
editedModel.attributes.value.should.equal(model2.value);
eventSpy.calledTwice.should.be.true;
eventSpy.calledWith('settings.edited').should.be.true;
done();
}).catch(done);
});
@ -117,6 +136,9 @@ describe('Settings Model', function () {
createdSetting.attributes.value.should.equal(newSetting.value, 'value is correct');
createdSetting.attributes.type.should.equal('core');
eventSpy.calledOnce.should.be.true;
eventSpy.calledWith('settings.added').should.be.true;
done();
}).catch(done);
});

View file

@ -9,7 +9,7 @@ var testUtils = require('../../utils'),
// Stuff we are testing
ModelsTag = require('../../../server/models/tag'),
ModelsPost = require('../../../server/models/post'),
events = require('../../../server/events'),
events = require('../../../server/events'),
context = testUtils.context.admin,
TagModel,
PostModel,