mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-14 09:52:09 +03:00
91ca4a43e5
closes #1757 and #1773 - switches routes.frontend for posts and pages to use a regex with two capturing groups. This removes the need to dynamically remove an express route at a later point, leaving the decision making to frontend controller. - added unit tests for all routing conditions that can arise for posts and pages. - updated functional tests to also test for same thing in unit tests - removes old code from server/api/index that used to fix this issue, but is no longer needed - removed some un-needed require statements in routes/admin
221 lines
6.6 KiB
JavaScript
221 lines
6.6 KiB
JavaScript
/*globals describe, beforeEach, afterEach, it*/
|
|
var assert = require('assert'),
|
|
should = require('should'),
|
|
sinon = require('sinon'),
|
|
when = require('when'),
|
|
|
|
// Stuff we are testing
|
|
config = require('../../server/config'),
|
|
api = require('../../server/api'),
|
|
frontend = require('../../server/controllers/frontend');
|
|
|
|
describe('Frontend Controller', function () {
|
|
|
|
var ghost,
|
|
sandbox,
|
|
apiSettingsStub;
|
|
|
|
beforeEach(function () {
|
|
sandbox = sinon.sandbox.create();
|
|
});
|
|
|
|
afterEach(function () {
|
|
sandbox.restore();
|
|
});
|
|
|
|
|
|
describe('homepage', function () {
|
|
// No tests yet, shows up in coverage report
|
|
});
|
|
|
|
describe('single', function() {
|
|
var mockStaticPost = {
|
|
'status': 'published',
|
|
'id': 1,
|
|
'title': 'Test static page',
|
|
'slug': 'test-static-page',
|
|
'markdown': 'Test static page content',
|
|
'page': 1
|
|
};
|
|
|
|
var mockPost = {
|
|
'status': 'published',
|
|
'id': 2,
|
|
'title': 'Test normal post',
|
|
'slug': 'test-normal-post',
|
|
'markdown': 'The test normal post content',
|
|
'page': 0
|
|
};
|
|
|
|
beforeEach(function () {
|
|
sandbox.stub(api.posts , 'read', function (args) {
|
|
return when(args.slug === mockStaticPost.slug ? mockStaticPost : mockPost);
|
|
});
|
|
|
|
apiSettingsStub = sandbox.stub(api.settings , 'read');
|
|
|
|
apiSettingsStub.withArgs('activeTheme').returns(when({
|
|
'key': 'activeTheme',
|
|
'value': 'casper'
|
|
}));
|
|
|
|
sandbox.stub(config , 'paths', function () {
|
|
return {
|
|
'availableThemes': {
|
|
'casper': {
|
|
'assets': null,
|
|
'default': '/content/themes/casper/default.hbs',
|
|
'index': '/content/themes/casper/index.hbs',
|
|
'page': '/content/themes/casper/page.hbs',
|
|
'post': '/content/themes/casper/post.hbs'
|
|
}
|
|
}
|
|
};
|
|
});
|
|
});
|
|
|
|
describe('permalink set to slug', function() {
|
|
beforeEach(function() {
|
|
apiSettingsStub.withArgs('permalinks').returns(when({
|
|
value: '/:slug/'
|
|
}));
|
|
});
|
|
|
|
it('can render a static page', function(done) {
|
|
var req = {
|
|
params: ['', 'test-static-page']
|
|
};
|
|
|
|
var res = {
|
|
render: function(view, context) {
|
|
assert.equal(view, 'page');
|
|
assert.equal(context.post, mockStaticPost);
|
|
done();
|
|
}
|
|
};
|
|
|
|
frontend.single(req, res, null);
|
|
});
|
|
|
|
it('won\'t render a static page accessed as a date url', function(done) {
|
|
var req = {
|
|
params: ['2012/12/30', 'test-static-page']
|
|
};
|
|
|
|
var res = {
|
|
render: sinon.spy()
|
|
};
|
|
|
|
frontend.single(req, res, function() {
|
|
res.render.called.should.be.false;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('can render a normal post', function(done) {
|
|
var req = {
|
|
params: ['', 'test-normal-post']
|
|
};
|
|
|
|
var res = {
|
|
render: function(view, context) {
|
|
assert.equal(view, 'post');
|
|
assert(context.post, 'Context object has post attribute');
|
|
assert.equal(context.post, mockPost);
|
|
done();
|
|
}
|
|
};
|
|
|
|
frontend.single(req, res, null);
|
|
});
|
|
|
|
it('won\'t render a normal post accessed as a date url', function(done) {
|
|
var req = {
|
|
params: ['2012/12/30', 'test-normal-post']
|
|
};
|
|
|
|
var res = {
|
|
render: sinon.spy()
|
|
};
|
|
|
|
frontend.single(req, res, function() {
|
|
res.render.called.should.be.false;
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('permalink set to date', function() {
|
|
beforeEach(function() {
|
|
apiSettingsStub.withArgs('permalinks').returns(when({
|
|
value: '/:year/:month/:day/:slug/'
|
|
}));
|
|
});
|
|
|
|
it('can render a static page', function(done) {
|
|
var req = {
|
|
params: ['', 'test-static-page']
|
|
};
|
|
|
|
var res = {
|
|
render: function(view, context) {
|
|
assert.equal(view, 'page');
|
|
assert.equal(context.post, mockStaticPost);
|
|
done();
|
|
}
|
|
};
|
|
|
|
frontend.single(req, res, null);
|
|
});
|
|
|
|
it('won\'t render a static page accessed as a date url', function(done) {
|
|
var req = {
|
|
params: ['2012/12/30', 'test-static-page']
|
|
};
|
|
|
|
var res = {
|
|
render: sinon.spy()
|
|
};
|
|
|
|
frontend.single(req, res, function() {
|
|
res.render.called.should.be.false;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('can render a normal post', function(done) {
|
|
var req = {
|
|
params: ['2012/12/30', 'test-normal-post']
|
|
};
|
|
|
|
var res = {
|
|
render: function(view, context) {
|
|
assert.equal(view, 'post');
|
|
assert(context.post, 'Context object has post attribute');
|
|
assert.equal(context.post, mockPost);
|
|
done();
|
|
}
|
|
};
|
|
|
|
frontend.single(req, res, null);
|
|
});
|
|
|
|
it('won\'t render a normal post accessed as a slug url', function(done) {
|
|
var req = {
|
|
params: ['', 'test-normal-post']
|
|
};
|
|
|
|
var res = {
|
|
render: sinon.spy()
|
|
};
|
|
|
|
frontend.single(req, res, function() {
|
|
res.render.called.should.be.false;
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
});
|
|
}); |