mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-27 12:53:13 +03:00
9ce407966f
- when activating a theme, we need to load the current locale - this request used to be buried deep in the themeI18n init call - now we surface it in the bridge and pass it down, which is closer to what we want to do with eventually initialising the frontend with everything it needs up front (or not initialising it, if it isn't needed) - in the related helpers we depend on the site.locale value instead of proxy -> themeI18n -> settingsCache drastically simplifying the code and removing deep requires - site.locale is updated via middleware and can be relied upon
113 lines
4.0 KiB
JavaScript
113 lines
4.0 KiB
JavaScript
const should = require('should');
|
|
const sinon = require('sinon');
|
|
const config = require('../../../../core/shared/config');
|
|
|
|
// is only exposed via themeEngine.getActive()
|
|
const activeTheme = require('../../../../core/frontend/services/theme-engine/active');
|
|
const engine = require('../../../../core/frontend/services/theme-engine/engine');
|
|
|
|
describe('Themes', function () {
|
|
afterEach(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
describe('Active', function () {
|
|
describe('Mount', function () {
|
|
let engineStub;
|
|
let configStub;
|
|
let fakeSettings;
|
|
let fakeBlogApp;
|
|
let fakeLoadedTheme;
|
|
let fakeCheckedTheme;
|
|
|
|
beforeEach(function () {
|
|
engineStub = sinon.stub(engine, 'configure');
|
|
configStub = sinon.stub(config, 'set');
|
|
|
|
fakeSettings = {
|
|
locale: 'en'
|
|
};
|
|
|
|
fakeBlogApp = {
|
|
cache: ['stuff'],
|
|
set: sinon.stub(),
|
|
engine: sinon.stub()
|
|
};
|
|
|
|
fakeLoadedTheme = {
|
|
name: 'casper',
|
|
path: 'my/fake/theme/path'
|
|
};
|
|
fakeCheckedTheme = {
|
|
templates: {
|
|
all: ['post', 'about', 'post-hey', 'custom-test'],
|
|
custom: ['custom-test', 'post-hey']
|
|
}
|
|
};
|
|
});
|
|
|
|
it('should mount active theme with partials', function () {
|
|
// setup partials
|
|
fakeCheckedTheme.partials = ['loop', 'navigation'];
|
|
|
|
const theme = activeTheme.set(fakeSettings, fakeLoadedTheme, fakeCheckedTheme);
|
|
|
|
// Check the theme is not yet mounted
|
|
activeTheme.get().mounted.should.be.false();
|
|
|
|
// Call mount!
|
|
theme.mount(fakeBlogApp);
|
|
|
|
// Check the asset hash gets reset
|
|
configStub.calledOnce.should.be.true();
|
|
configStub.calledWith('assetHash', null).should.be.true();
|
|
|
|
// Check te view cache was cleared
|
|
fakeBlogApp.cache.should.eql({});
|
|
|
|
// Check the views were set correctly
|
|
fakeBlogApp.set.calledOnce.should.be.true();
|
|
fakeBlogApp.set.calledWith('views', 'my/fake/theme/path').should.be.true();
|
|
|
|
// Check handlebars was configured correctly
|
|
engineStub.calledOnce.should.be.true();
|
|
engineStub.calledWith('my/fake/theme/path/partials').should.be.true();
|
|
|
|
// Check the theme is now mounted
|
|
activeTheme.get().mounted.should.be.true();
|
|
});
|
|
|
|
it('should mount active theme without partials', function () {
|
|
// setup partials
|
|
fakeCheckedTheme.partials = [];
|
|
|
|
const theme = activeTheme.set(fakeSettings, fakeLoadedTheme, fakeCheckedTheme);
|
|
|
|
// Check the theme is not yet mounted
|
|
activeTheme.get().mounted.should.be.false();
|
|
|
|
// Call mount!
|
|
theme.mount(fakeBlogApp);
|
|
|
|
// Check the asset hash gets reset
|
|
configStub.calledOnce.should.be.true();
|
|
configStub.calledWith('assetHash', null).should.be.true();
|
|
|
|
// Check te view cache was cleared
|
|
fakeBlogApp.cache.should.eql({});
|
|
|
|
// Check the views were set correctly
|
|
fakeBlogApp.set.calledOnce.should.be.true();
|
|
fakeBlogApp.set.calledWith('views', 'my/fake/theme/path').should.be.true();
|
|
|
|
// Check handlebars was configured correctly
|
|
engineStub.calledOnce.should.be.true();
|
|
engineStub.calledWith().should.be.true();
|
|
|
|
// Check the theme is now mounted
|
|
activeTheme.get().mounted.should.be.true();
|
|
});
|
|
});
|
|
});
|
|
});
|