mirror of https://github.com/pelias/api.git
Vesa Meskanen
9 years ago
21 changed files with 341 additions and 71 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