mirror of https://github.com/pelias/api.git
Diana Shkolnikov
9 years ago
7 changed files with 281 additions and 8 deletions
@ -0,0 +1,38 @@ |
|||||||
|
var logger = require('pelias-logger').get('api'); |
||||||
|
|
||||||
|
/** |
||||||
|
* Parses the bounding box property in docs, if one is found |
||||||
|
*/ |
||||||
|
|
||||||
|
function setup() { |
||||||
|
return function (req, res, next) { |
||||||
|
// do nothing if no result data set
|
||||||
|
if (!res || !res.data) { |
||||||
|
return next(); |
||||||
|
} |
||||||
|
|
||||||
|
res.data = res.data.map(parseBBox); |
||||||
|
|
||||||
|
next(); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* Parse the bbox property and form an object |
||||||
|
*/ |
||||||
|
function parseBBox(place) { |
||||||
|
|
||||||
|
if (place && place.bounding_box) { |
||||||
|
try { |
||||||
|
place.bounding_box = JSON.parse(place.bounding_box); |
||||||
|
} |
||||||
|
catch (err) { |
||||||
|
logger.error('Invalid bounding_box json string:', place); |
||||||
|
delete place.bounding_box; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return place; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = setup; |
@ -0,0 +1,65 @@ |
|||||||
|
var parseBBox = require('../../../middleware/parseBBox')(); |
||||||
|
|
||||||
|
module.exports.tests = {}; |
||||||
|
|
||||||
|
module.exports.tests.computeDistance = function(test, common) { |
||||||
|
test('valid bounding_box json', function(t) { |
||||||
|
var res = { |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
bounding_box: '{"min_lat":40.6514712164,"max_lat":40.6737320588,"min_lon":-73.8967895508,"max_lon":-73.8665771484}' |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
|
||||||
|
var expected = { |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
bounding_box: { |
||||||
|
min_lat: 40.6514712164, |
||||||
|
max_lat: 40.6737320588, |
||||||
|
min_lon: -73.8967895508, |
||||||
|
max_lon: -73.8665771484 |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
|
||||||
|
parseBBox({}, res, function () { |
||||||
|
t.deepEquals(res, expected, 'correct bounding_box'); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
test('invalid bounding_box json', function(t) { |
||||||
|
var res = { |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
bounding_box: 'garbage json' |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
|
||||||
|
var expected = { |
||||||
|
data: [ |
||||||
|
{} |
||||||
|
] |
||||||
|
}; |
||||||
|
|
||||||
|
parseBBox({}, res, function () { |
||||||
|
t.deepEquals(res, expected, 'correct bounding_box'); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
module.exports.all = function (tape, common) { |
||||||
|
|
||||||
|
function test(name, testFunction) { |
||||||
|
return tape('[middleware] parseBBox: ' + name, testFunction); |
||||||
|
} |
||||||
|
|
||||||
|
for( var testCase in module.exports.tests ){ |
||||||
|
module.exports.tests[testCase](test, common); |
||||||
|
} |
||||||
|
}; |
Loading…
Reference in new issue