mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 18:01:36 +03:00
829e8ed010
- Having these as destructured from the same package is hindering refactoring now - Events should really only ever be used server-side - i18n should be a shared module for now so it can be used everywhere until we figure out something better - Having them seperate also allows us to lint them properly
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/server/services/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
|
|
});
|
|
});
|
|
});
|