From aa625290415391d4010c1071ee911f2ae2510672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 2 Oct 2017 12:09:19 +0200 Subject: [PATCH] updating preprare-context test to allow the new res.locals usage --- test/unit/cartodb/prepare-context.test.js | 100 ++++++++++++++-------- 1 file changed, 62 insertions(+), 38 deletions(-) diff --git a/test/unit/cartodb/prepare-context.test.js b/test/unit/cartodb/prepare-context.test.js index a9119c13..0df4da24 100644 --- a/test/unit/cartodb/prepare-context.test.js +++ b/test/unit/cartodb/prepare-context.test.js @@ -10,6 +10,7 @@ var TemplateMaps = require('../../../lib/cartodb/backends/template_maps'); const cleanUpQueryParamsMiddleware = require('../../../lib/cartodb/middleware/context/clean-up-query-params'); const authorizeMiddleware = require('../../../lib/cartodb/middleware/context/authorize'); const dbConnSetupMiddleware = require('../../../lib/cartodb/middleware/context/db-conn-setup'); +const localsMiddleware = require('../../../lib/cartodb/middleware/context/locals'); var windshaft = require('windshaft'); @@ -43,60 +44,80 @@ describe('prepare-context', function() { assert.ok(_.isFunction(cleanUpQueryParams)); }); - function prepareRequest(req) { + function prepareRequest(req, res) { req.profiler = { done: function() {} }; req.context = { user: 'localhost' }; - req.params = {}; - return req; + res.locals = {}; + + return {req, res}; } - it('cleans up request', function(done){ - var req = {headers: { host:'localhost' }, query: {dbuser:'hacker',dbname:'secret'}}; - var res = {}; + it('res.locals are created', function(done) { + let req = {}; + let res = {}; - cleanUpQueryParams(prepareRequest(req), res, function(err) { - if ( err ) { done(err); return; } - assert.ok(_.isObject(req.query), 'request has query'); - assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); - assert.ok(req.hasOwnProperty('params'), 'request has params'); - assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params do not have interactivity'); - done(); - }); + ({req, res} = prepareRequest(req, res)); + + localsMiddleware(req, res, function(err) { + if ( err ) { done(err); return; } + assert.ok(res.hasOwnProperty('locals'), 'response has locals'); + done(); + }); + }); + + it('cleans up request', function(done){ + var req = {headers: { host:'localhost' }, query: {dbuser:'hacker',dbname:'secret'}}; + var res = {}; + + ({req, res} = prepareRequest(req, res)); + + cleanUpQueryParams(req, res, function(err) { + if ( err ) { done(err); return; } + assert.ok(_.isObject(req.query), 'request has query'); + assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); + assert.ok(res.hasOwnProperty('locals'), 'response has locals'); + assert.ok(!res.locals.hasOwnProperty('interactivity'), 'response locals do not have interactivity'); + done(); + }); }); it('sets dbname from redis metadata', function(done){ - var req = {headers: { host:'localhost' }, query: {}, locals: {} }; - var res = {}; + var req = {headers: { host:'localhost' }, query: {} }; + var res = {}; - dbConnSetup(prepareRequest(req), res, function(err) { - if ( err ) { done(err); return; } - assert.ok(_.isObject(req.query), 'request has query'); - assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); - assert.ok(req.hasOwnProperty('params'), 'request has params'); - assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params do not have interactivity'); - assert.equal(req.params.dbname, test_database); - assert.ok(req.params.dbuser === test_pubuser, 'could inject dbuser ('+req.params.dbuser+')'); - done(); - }); + ({req, res} = prepareRequest(req, res)); + + dbConnSetup(req, res, function(err) { + if ( err ) { done(err); return; } + assert.ok(_.isObject(req.query), 'request has query'); + assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); + assert.ok(res.hasOwnProperty('locals'), 'response has locals'); + assert.ok(!res.locals.hasOwnProperty('interactivity'), 'response locals do not have interactivity'); + assert.equal(res.locals.dbname, test_database); + assert.ok(res.locals.dbuser === test_pubuser, 'could inject dbuser ('+res.locals.dbuser+')'); + done(); + }); }); it('sets also dbuser for authenticated requests', function(done){ - var req = { headers: { host: 'localhost' }, query: { map_key: '1234' }, locals: {} }; + var req = { headers: { host: 'localhost' }, query: { map_key: '1234' }}; var res = {}; + ({req, res} = prepareRequest(req, res)); + // FIXME: review authorize-pgconnsetup workflow, It might we are doing authorization twice. - authorize(prepareRequest(req), res, function (err) { + authorize(req, res, function (err) { if (err) { done(err); return; } dbConnSetup(req, res, function(err) { if ( err ) { done(err); return; } assert.ok(_.isObject(req.query), 'request has query'); assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); - assert.ok(req.hasOwnProperty('params'), 'request has params'); - assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params do not have interactivity'); - assert.equal(req.params.dbname, test_database); - assert.equal(req.params.dbuser, test_user); + assert.ok(res.hasOwnProperty('locals'), 'response has locals'); + assert.ok(!res.locals.hasOwnProperty('interactivity'), 'request params do not have interactivity'); + assert.equal(res.locals.dbname, test_database); + assert.equal(res.locals.dbuser, test_user); req = { headers: { @@ -108,9 +129,11 @@ describe('prepare-context', function() { locals: {} }; - dbConnSetup(prepareRequest(req), res, function(err, req) { + ({req, res} = prepareRequest(req, res)); + + dbConnSetup(req, res, function(err, req) { // wrong key resets params to no user - assert.ok(req.params.dbuser === test_pubuser, 'could inject dbuser ('+req.params.dbuser+')'); + assert.ok(res.locals.dbuser === test_pubuser, 'could inject dbuser ('+res.locals.dbuser+')'); done(); }); }); @@ -130,17 +153,18 @@ describe('prepare-context', function() { api_key: 'test', style: 'override', config: config - }, - locals: {} + } }; var res = {}; - cleanUpQueryParams(prepareRequest(req), res, function (err) { + ({req, res} = prepareRequest(req, res)); + + cleanUpQueryParams(req, res, function (err) { if ( err ) { return done(err); } - var query = req.params; + var query = res.locals; assert.deepEqual(config, query.config); assert.equal('test', query.api_key); assert.equal(undefined, query.non_included);