mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-23 19:02:29 +03:00
07254edfe3
refs 41c93f982d
- The public settings hash was "turned around" so that the object keys are now identified by "keys" on "values"
100 lines
3.3 KiB
JavaScript
100 lines
3.3 KiB
JavaScript
const rewire = require('rewire');
|
|
const should = require('should');
|
|
const sinon = require('sinon');
|
|
const _ = require('lodash');
|
|
const {events} = require('../../../../core/server/lib/common');
|
|
const publicSettings = require('../../../../core/server/services/settings/public');
|
|
let cache = rewire('../../../../core/server/services/settings/cache');
|
|
|
|
should.equal(true, true);
|
|
|
|
describe('UNIT: settings cache', function () {
|
|
beforeEach(function () {
|
|
cache = rewire('../../../../core/server/services/settings/cache');
|
|
});
|
|
|
|
afterEach(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
it('does not auto convert string into number', function () {
|
|
cache.set('key1', {value: '1'});
|
|
(typeof cache.get('key1')).should.eql('string');
|
|
});
|
|
|
|
it('does not auto convert string into number: float', function () {
|
|
cache.set('key1', {value: '1.4'});
|
|
(typeof cache.get('key1')).should.eql('string');
|
|
});
|
|
|
|
it('stringified JSON get\'s parsed', function () {
|
|
cache.set('key2', {value: '{"a":"1","b":"hallo","c":{"d":[]},"e":2}'});
|
|
(typeof cache.get('key2')).should.eql('object');
|
|
cache.get('key2').a.should.eql('1');
|
|
cache.get('key2').b.should.eql('hallo');
|
|
cache.get('key2').c.should.eql({d: []});
|
|
cache.get('key2').e.should.eql(2);
|
|
});
|
|
|
|
it('can get all values', function () {
|
|
cache.set('key1', {value: '1'});
|
|
cache.get('key1').should.eql('1');
|
|
cache.getAll().should.eql({key1: {value: '1'}});
|
|
});
|
|
|
|
it('correctly filters and formats public values', function () {
|
|
cache.set('key1', {value: 'something'});
|
|
cache.set('title', {value: 'hello world'});
|
|
cache.set('timezone', {value: 'PST'});
|
|
|
|
cache.getAll().should.eql({
|
|
key1: {value: 'something'},
|
|
title: {value: 'hello world'},
|
|
timezone: {value: 'PST'}
|
|
});
|
|
|
|
let values = _.zipObject(_.keys(publicSettings), _.fill(Array(_.size(publicSettings)), null));
|
|
values.title = 'hello world';
|
|
values.timezone = 'PST';
|
|
|
|
cache.getPublic().should.eql(values);
|
|
});
|
|
|
|
it('can shutdown and init without double handling of events', function () {
|
|
const setSpy = sinon.spy(cache, 'set');
|
|
|
|
const settingsCollection = {
|
|
models: [{
|
|
get: () => 'key1',
|
|
toJSON: () => ({value: 'init value'})
|
|
}]
|
|
};
|
|
|
|
cache.init(settingsCollection);
|
|
cache.get('key1').should.equal('init value');
|
|
|
|
// check handler only called once on settings.edit
|
|
setSpy.callCount.should.equal(1);
|
|
events.emit('settings.edited', {
|
|
get: () => 'key1',
|
|
toJSON: () => ({value: 'first edit'})
|
|
});
|
|
setSpy.callCount.should.equal(2);
|
|
cache.get('key1').should.equal('first edit');
|
|
|
|
// shutdown + init
|
|
cache.shutdown();
|
|
cache.init(settingsCollection);
|
|
setSpy.callCount.should.equal(3);
|
|
cache.get('key1').should.equal('init value');
|
|
|
|
// edit again, check event only fired once
|
|
events.emit('settings.edited', {
|
|
get: () => 'key1',
|
|
toJSON: () => ({value: 'second edit'})
|
|
});
|
|
setSpy.callCount.should.equal(4);
|
|
cache.get('key1').should.equal('second edit');
|
|
});
|
|
});
|