From 511684c436ae55be2020c7d84eb650c8e604daab Mon Sep 17 00:00:00 2001 From: Alex Kleissner Date: Tue, 9 Jun 2015 13:59:49 -0700 Subject: [PATCH] Moves the decideIsAdmin into its own file. refs #5286 - Moved the function into its own file - Added unit tests for the function --- core/server/middleware/decide-is-admin.js | 17 ++++++ core/server/middleware/index.js | 8 +-- .../unit/middleware/decide-is-admin_spec.js | 58 +++++++++++++++++++ 3 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 core/server/middleware/decide-is-admin.js create mode 100644 core/test/unit/middleware/decide-is-admin_spec.js diff --git a/core/server/middleware/decide-is-admin.js b/core/server/middleware/decide-is-admin.js new file mode 100644 index 0000000000..1e3881fad2 --- /dev/null +++ b/core/server/middleware/decide-is-admin.js @@ -0,0 +1,17 @@ +// # DecideIsAdmin Middleware +// Usage: decideIsAdmin(request, result, next) +// After: +// Before: +// App: Blog +// +// Helper function to determine if its an admin page. + +var decideIsAdmin; + +decideIsAdmin = function decideIsAdmin(req, res, next) { + /*jslint unparam:true*/ + res.isAdmin = req.url.lastIndexOf('/ghost/', 0) === 0; + next(); +}; + +module.exports = decideIsAdmin; diff --git a/core/server/middleware/index.js b/core/server/middleware/index.js index f0e1b7e914..9b9aa5f587 100644 --- a/core/server/middleware/index.js +++ b/core/server/middleware/index.js @@ -23,6 +23,7 @@ var api = require('../api'), authStrategies = require('./auth-strategies'), utils = require('../utils'), sitemapHandler = require('../data/xml/sitemap/handler'), + decideIsAdmin = require('./decide-is-admin'), blogApp, setupMiddleware; @@ -75,13 +76,6 @@ function activateTheme(activeTheme) { // Set active theme variable on the express server blogApp.set('activeTheme', activeTheme); } -// ### decideIsAdmin Middleware -// Uses the URL to detect whether this response should be an admin response -// This is used to ensure the right content is served, and is not for security purposes -function decideIsAdmin(req, res, next) { - res.isAdmin = req.url.lastIndexOf('/ghost/', 0) === 0; - next(); -} // ### configHbsForContext Middleware // Setup handlebars for the current context (admin or theme) diff --git a/core/test/unit/middleware/decide-is-admin_spec.js b/core/test/unit/middleware/decide-is-admin_spec.js new file mode 100644 index 0000000000..750a7b3f5c --- /dev/null +++ b/core/test/unit/middleware/decide-is-admin_spec.js @@ -0,0 +1,58 @@ +/*globals describe, beforeEach, afterEach, it*/ +/*jshint expr:true*/ +var sinon = require('sinon'), + decideIsAdmin = require('../../../server/middleware/decide-is-admin'); + +describe('Middleware: decideIsAdmin', function () { + var sandbox, + res, + req, + next; + + beforeEach(function () { + sandbox = sinon.sandbox.create(); + + next = sinon.spy(); + res = sinon.spy(); + req = {}; + }); + + afterEach(function () { + sandbox.restore(); + }); + + it('sets the isAdmin flag if the url contains /ghost/.', function (done) { + var trueUrls = [ + '/ghost/', + '/ghost/foo?bar=foo' + ], + falseUrls = [ + '/ghost', + 'ghost/', + '/foobar/ghost', + '/things/ghost/foo' + ]; + + trueUrls.forEach(function (url) { + res = sinon.spy(); + next = sinon.spy(); + req.url = url; + + decideIsAdmin(req, res, next); + res.isAdmin.should.be.exactly(true); + next.calledOnce.should.be.exactly(true); + }); + + falseUrls.forEach(function (url) { + res = sinon.spy(); + next = sinon.spy(); + req.url = url; + + decideIsAdmin(req, res, next); + res.isAdmin.should.be.exactly(false); + next.calledOnce.should.be.exactly(true); + }); + + done(); + }); +});