mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-23 02:41:50 +03:00
bd597db829
- This is part of the quest to separate the frontend and server & get rid of all the places where there are cross-requires - At the moment the settings cache is one big shared cache used by the frontend and server liberally - This change doesn't really solve the fundamental problems, as we still depend on events, and requires from inside frontend - However it allows us to control the misuse slightly better by getting rid of restricted requires and turning on that eslint ruleset
122 lines
4.6 KiB
JavaScript
122 lines
4.6 KiB
JavaScript
const should = require('should');
|
|
const sinon = require('sinon');
|
|
const _ = require('lodash');
|
|
const settingsCache = require('../../../../core/shared/settings-cache');
|
|
const events = require('../../../../core/server/lib/common/events');
|
|
const controllers = require('../../../../core/frontend/services/routing/controllers');
|
|
const TaxonomyRouter = require('../../../../core/frontend/services/routing/TaxonomyRouter');
|
|
const RESOURCE_CONFIG_V2 = require('../../../../core/frontend/services/routing/config/v2');
|
|
const RESOURCE_CONFIG_CANARY = require('../../../../core/frontend/services/routing/config/canary');
|
|
const RESOURCE_CONFIG_V3 = require('../../../../core/frontend/services/routing/config/v3');
|
|
|
|
describe('UNIT - services/routing/TaxonomyRouter', function () {
|
|
let req;
|
|
let res;
|
|
let next;
|
|
|
|
beforeEach(function () {
|
|
sinon.stub(settingsCache, 'get').withArgs('permalinks').returns('/:slug/');
|
|
|
|
sinon.stub(events, 'emit');
|
|
sinon.stub(events, 'on');
|
|
|
|
sinon.spy(TaxonomyRouter.prototype, 'mountRoute');
|
|
sinon.spy(TaxonomyRouter.prototype, 'mountRouter');
|
|
|
|
req = sinon.stub();
|
|
res = sinon.stub();
|
|
next = sinon.stub();
|
|
|
|
res.locals = {};
|
|
});
|
|
|
|
afterEach(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
it('instantiate', function () {
|
|
const taxonomyRouter = new TaxonomyRouter('tag', '/tag/:slug/');
|
|
|
|
should.exist(taxonomyRouter.router);
|
|
should.exist(taxonomyRouter.rssRouter);
|
|
|
|
taxonomyRouter.taxonomyKey.should.eql('tag');
|
|
taxonomyRouter.getPermalinks().getValue().should.eql('/tag/:slug/');
|
|
|
|
events.emit.calledOnce.should.be.true();
|
|
events.emit.calledWith('router.created', taxonomyRouter).should.be.true();
|
|
|
|
taxonomyRouter.mountRouter.callCount.should.eql(1);
|
|
taxonomyRouter.mountRouter.args[0][0].should.eql('/tag/:slug/');
|
|
taxonomyRouter.mountRouter.args[0][1].should.eql(taxonomyRouter.rssRouter.router());
|
|
|
|
taxonomyRouter.mountRoute.callCount.should.eql(3);
|
|
|
|
// permalink route
|
|
taxonomyRouter.mountRoute.args[0][0].should.eql('/tag/:slug/');
|
|
taxonomyRouter.mountRoute.args[0][1].should.eql(controllers.channel);
|
|
|
|
// pagination feature
|
|
taxonomyRouter.mountRoute.args[1][0].should.eql('/tag/:slug/page/:page(\\d+)');
|
|
taxonomyRouter.mountRoute.args[1][1].should.eql(controllers.channel);
|
|
|
|
// edit feature
|
|
taxonomyRouter.mountRoute.args[2][0].should.eql('/tag/:slug/edit');
|
|
taxonomyRouter.mountRoute.args[2][1].should.eql(taxonomyRouter._redirectEditOption.bind(taxonomyRouter));
|
|
});
|
|
|
|
it('v2:fn: _prepareContext', function () {
|
|
const taxonomyRouter = new TaxonomyRouter('tag', '/tag/:slug/', RESOURCE_CONFIG_V2);
|
|
taxonomyRouter._prepareContext(req, res, next);
|
|
next.calledOnce.should.eql(true);
|
|
|
|
res.routerOptions.should.eql({
|
|
type: 'channel',
|
|
name: 'tag',
|
|
permalinks: '/tag/:slug/',
|
|
resourceType: RESOURCE_CONFIG_V2.QUERY.tag.resource,
|
|
data: {tag: RESOURCE_CONFIG_V2.QUERY.tag},
|
|
filter: RESOURCE_CONFIG_V2.TAXONOMIES.tag.filter,
|
|
context: ['tag'],
|
|
slugTemplate: true,
|
|
identifier: taxonomyRouter.identifier
|
|
});
|
|
});
|
|
|
|
it('canary:fn: _prepareContext', function () {
|
|
const taxonomyRouter = new TaxonomyRouter('tag', '/tag/:slug/', RESOURCE_CONFIG_CANARY);
|
|
taxonomyRouter._prepareContext(req, res, next);
|
|
next.calledOnce.should.eql(true);
|
|
|
|
res.routerOptions.should.eql({
|
|
type: 'channel',
|
|
name: 'tag',
|
|
permalinks: '/tag/:slug/',
|
|
resourceType: RESOURCE_CONFIG_V2.QUERY.tag.resource,
|
|
data: {tag: RESOURCE_CONFIG_V2.QUERY.tag},
|
|
filter: RESOURCE_CONFIG_V2.TAXONOMIES.tag.filter,
|
|
context: ['tag'],
|
|
slugTemplate: true,
|
|
identifier: taxonomyRouter.identifier
|
|
});
|
|
});
|
|
|
|
it('v3:fn: _prepareContext', function () {
|
|
const taxonomyRouter = new TaxonomyRouter('tag', '/tag/:slug/', RESOURCE_CONFIG_V3);
|
|
taxonomyRouter._prepareContext(req, res, next);
|
|
next.calledOnce.should.eql(true);
|
|
|
|
res.routerOptions.should.eql({
|
|
type: 'channel',
|
|
name: 'tag',
|
|
permalinks: '/tag/:slug/',
|
|
resourceType: RESOURCE_CONFIG_V2.QUERY.tag.resource,
|
|
data: {tag: RESOURCE_CONFIG_V2.QUERY.tag},
|
|
filter: RESOURCE_CONFIG_V2.TAXONOMIES.tag.filter,
|
|
context: ['tag'],
|
|
slugTemplate: true,
|
|
identifier: taxonomyRouter.identifier
|
|
});
|
|
});
|
|
});
|