diff --git a/core/server/controllers/frontend.js b/core/server/controllers/frontend.js index bc64321f14..e192c45484 100644 --- a/core/server/controllers/frontend.js +++ b/core/server/controllers/frontend.js @@ -72,7 +72,7 @@ frontendControllers = { if (post) { filters.doFilter('prePostsRender', post).then(function (post) { api.settings.read('activeTheme').then(function (activeTheme) { - var paths = config.paths().availableThemes[activeTheme]; + var paths = config.paths().availableThemes[activeTheme.value]; if (post.page && paths.hasOwnProperty('page')) { res.render('page', {post: post}); } else { diff --git a/core/test/functional/api/posts_test.js b/core/test/functional/api/posts_test.js index f4acb60230..5b36457e50 100644 --- a/core/test/functional/api/posts_test.js +++ b/core/test/functional/api/posts_test.js @@ -4,7 +4,7 @@ var testUtils = require('../../utils'), _ = require('underscore'), request = require('request'); -request = request.defaults({jar:true}) +request = request.defaults({jar:true}); describe('Post API', function () { @@ -55,13 +55,27 @@ describe('Post API', function () { }); it('can retrieve a post', function (done) { - request.get(testUtils.API.getApiURL('posts/1/'), function (error, response, body) { + request.get(testUtils.API.getApiURL('posts/5/'), function (error, response, body) { response.should.have.status(200); should.not.exist(response.headers['x-cache-invalidate']); response.should.be.json; var jsonResponse = JSON.parse(body); jsonResponse.should.exist; testUtils.API.checkResponse(jsonResponse, 'post'); + jsonResponse.page.should.eql(0); + done(); + }); + }); + + it('can retrieve a static page', function (done) { + request.get(testUtils.API.getApiURL('posts/6/'), function (error, response, body) { + response.should.have.status(200); + should.not.exist(response.headers['x-cache-invalidate']); + response.should.be.json; + var jsonResponse = JSON.parse(body); + jsonResponse.should.exist; + testUtils.API.checkResponse(jsonResponse, 'post'); + jsonResponse.page.should.eql(1); done(); }); }); diff --git a/core/test/integration/model/model_posts_spec.js b/core/test/integration/model/model_posts_spec.js index 9ab6c2be2a..9eabd387aa 100644 --- a/core/test/integration/model/model_posts_spec.js +++ b/core/test/integration/model/model_posts_spec.js @@ -6,6 +6,7 @@ var testUtils = require('../../utils'), sequence = require('when/sequence'), // Stuff we are testing + DataGenerator = require('../../utils/fixtures/data-generator'), Models = require('../../../server/models'); describe('Post Model', function () { diff --git a/core/test/unit/frontend_spec.js b/core/test/unit/frontend_spec.js index 806ee96da5..0b8f527e41 100644 --- a/core/test/unit/frontend_spec.js +++ b/core/test/unit/frontend_spec.js @@ -1,13 +1,120 @@ /*globals describe, beforeEach, afterEach, it*/ -var should = require('should'), +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, + apiStub; + + 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 () { + apiStub = sandbox.stub(api.posts , 'read', function (args) { + return when(args.id === 1 ? mockStaticPost : mockPost); + }); + + sandbox.stub(api.settings , 'read', function () { + return 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' + } + } + }; + }); + }); + + it('can render a static page', function(done) { + var req = { + params: { + 'id': 1, + 'slug': 'test-static-page' + } + }; + + var res = { + render: function(view, context) { + assert.equal(view, 'page'); + assert(context.post, 'Context object has post attribute'); + assert.equal(context.post, mockStaticPost); + done(); + } + }; + + frontend.single(req, res, null); + + }); + + it('can render a normal post', function(done) { + var req = { + params: { + 'id': 2, + 'slug': '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); + + }); + + }); }); \ No newline at end of file diff --git a/core/test/utils/fixtures/data-generator.js b/core/test/utils/fixtures/data-generator.js index 3a6fb41a38..5ea38d7e22 100644 --- a/core/test/utils/fixtures/data-generator.js +++ b/core/test/utils/fixtures/data-generator.js @@ -1,5 +1,5 @@ var _ = require('underscore'), - uuid = require('node-uuid') + uuid = require('node-uuid'), DataGenerator = {}; DataGenerator.Content = { @@ -24,6 +24,12 @@ DataGenerator.Content = { title: "Not so short, bit complex", slug: "not-so-short-bit-complex", markdown: "
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
1 | 2 | 3 | 4 |
---|---|---|---|
a | b | c | d |
e | f | g | h |
i | j | k | l |
Hopefully you don't find it a bore.
", + page: 1 } ], @@ -159,7 +165,8 @@ DataGenerator.forKnex = (function () { createPost(DataGenerator.Content.posts[0]), createPost(DataGenerator.Content.posts[1]), createPost(DataGenerator.Content.posts[2]), - createPost(DataGenerator.Content.posts[3]) + createPost(DataGenerator.Content.posts[3]), + createPost(DataGenerator.Content.posts[4]) ]; tags = [ @@ -205,7 +212,7 @@ DataGenerator.forModel = (function () { tags = DataGenerator.Content.tags; users = _.map(DataGenerator.Content.users, function (user) { - var user = _.pick(user, 'name', 'email'); + user = _.pick(user, 'name', 'email'); return _.defaults({ password: 'Sl1m3rson'