diff --git a/middleware/sizeCalculator.js b/middleware/sizeCalculator.js index 69409e45..f7ea906a 100644 --- a/middleware/sizeCalculator.js +++ b/middleware/sizeCalculator.js @@ -2,21 +2,25 @@ var _ = require('lodash'); var SIZE_PADDING = 2; -var MIN_QUERY_SIZE = 20; +var DEFAULT_MIN_QUERY_SIZE = 20; /** * Utility for calculating query result size * incorporating padding for dedupe process */ -function setup() { - return function setQuerySize(req, res, next) { - if (_.isUndefined(req.clean) || _.isUndefined(req.clean.size)) { - return next(); - } +function setup(min_size) { + if (min_size === undefined) { + min_size = DEFAULT_MIN_QUERY_SIZE; + } - req.clean.querySize = calculateSize(req.clean.size); - next(); - }; + return function setQuerySize(req, res, next) { + if (_.isUndefined(req.clean) || _.isUndefined(req.clean.size)) { + return next(); + } + + req.clean.querySize = calculateSize(req.clean.size, min_size); + next(); + }; } /** @@ -25,8 +29,8 @@ function setup() { * @param {number} cleanSize * @returns {number} */ -function calculateSize(cleanSize) { - return Math.max(MIN_QUERY_SIZE, cleanSize * SIZE_PADDING); +function calculateSize(cleanSize, min_size) { + return Math.max(min_size, cleanSize * SIZE_PADDING); } module.exports = setup; diff --git a/routes/v1.js b/routes/v1.js index f4e8176f..6b40f1d6 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -344,7 +344,7 @@ function addRoutes(app, peliasConfig) { reverse: createRouter([ sanitizers.reverse.middleware, middleware.requestLanguage, - middleware.calcSize(), + middleware.calcSize(2), controllers.search(peliasConfig.api, esclient, queries.reverse, nonCoarseReverseShouldExecute), controllers.coarse_reverse(pipService, coarseReverseShouldExecute), postProc.distances('point.'), diff --git a/test/unit/helper/sizeCalculator.js b/test/unit/middleware/sizeCalculator.js similarity index 53% rename from test/unit/helper/sizeCalculator.js rename to test/unit/middleware/sizeCalculator.js index 6c8d8d22..204c6870 100644 --- a/test/unit/helper/sizeCalculator.js +++ b/test/unit/middleware/sizeCalculator.js @@ -1,18 +1,17 @@ - -var calcSize = require('../../../middleware/sizeCalculator.js')(); +var calcSizeMiddleware = require('../../../middleware/sizeCalculator.js'); module.exports.tests = {}; module.exports.tests.interface = function(test, common) { test('interface', function(t) { - t.equal(typeof calcSize, 'function', 'valid function'); + t.equal(typeof calcSizeMiddleware, 'function', 'valid function'); t.end(); }); }; module.exports.tests.valid = function(test, common) { var req = { clean: {} }; - function setup(val) { + function setupQuery(val) { if (isNaN(val)) { delete req.clean.size; } @@ -23,7 +22,8 @@ module.exports.tests.valid = function(test, common) { } test('size=0', function (t) { - setup(0); + setupQuery(0); + const calcSize = calcSizeMiddleware(); calcSize(req, {}, function () { t.equal(req.clean.querySize, 20); t.end(); @@ -31,7 +31,8 @@ module.exports.tests.valid = function(test, common) { }); test('size=1', function (t) { - setup(1); + setupQuery(1); + const calcSize = calcSizeMiddleware(); calcSize(req, {}, function () { t.equal(req.clean.querySize, 20); t.end(); @@ -39,7 +40,8 @@ module.exports.tests.valid = function(test, common) { }); test('size=10', function (t) { - setup(10); + setupQuery(10); + const calcSize = calcSizeMiddleware(); calcSize(req, {}, function () { t.equal(req.clean.querySize, 20); t.end(); @@ -47,7 +49,8 @@ module.exports.tests.valid = function(test, common) { }); test('size=20', function (t) { - setup(20); + setupQuery(20); + const calcSize = calcSizeMiddleware(); calcSize(req, {}, function () { t.equal(req.clean.querySize, 40); t.end(); @@ -55,12 +58,40 @@ module.exports.tests.valid = function(test, common) { }); test('no size', function (t) { - setup(); + setupQuery(); + const calcSize = calcSizeMiddleware(); calcSize(req, {}, function () { t.equal(req.clean.hasOwnProperty('querySize'), false); t.end(); }); }); + + test('no size, min query size 10', function (t) { + setupQuery(); + const calcSize = calcSizeMiddleware(10); + calcSize(req, {}, function () { + t.equal(req.clean.hasOwnProperty('querySize'), false); + t.end(); + }); + }); + + test('size 5, min query size 10', function (t) { + setupQuery(5); + const calcSize = calcSizeMiddleware(10); + calcSize(req, {}, function () { + t.equal(req.clean.querySize, 10); + t.end(); + }); + }); + + test('size 3, min query size 2', function (t) { + setupQuery(3); + const calcSize = calcSizeMiddleware(2); + calcSize(req, {}, function () { + t.equal(req.clean.querySize, 6); + t.end(); + }); + }); }; module.exports.all = function (tape, common) { diff --git a/test/unit/run.js b/test/unit/run.js index ffebf9ea..1a557733 100644 --- a/test/unit/run.js +++ b/test/unit/run.js @@ -36,7 +36,6 @@ var tests = [ require('./helper/geojsonify'), require('./helper/logging'), require('./helper/type_mapping'), - require('./helper/sizeCalculator'), require('./helper/stackTraceLine'), require('./middleware/access_log'), require('./middleware/accuracy'), @@ -52,6 +51,7 @@ var tests = [ require('./middleware/parseBBox'), require('./middleware/sendJSON'), require('./middleware/normalizeParentIds'), + require('./middleware/sizeCalculator'), require('./middleware/sortResponseData'), require('./middleware/trimByGranularity'), require('./middleware/trimByGranularityStructured'),