Browse Source

set boundary.circle.radius to default if caller did not supply it

pull/295/head
Stephen Hess 9 years ago
parent
commit
0f6d08c0ec
  1. 2
      sanitiser/_geo_common.js
  2. 21
      sanitiser/_geo_reverse.js
  3. 47
      test/unit/sanitiser/_geo_reverse.js
  4. 2
      test/unit/sanitiser/reverse.js

2
sanitiser/_geo_common.js

@ -56,6 +56,8 @@ function sanitize_rect( key_prefix, clean, raw, bbox_is_required ) {
* @param {bool} circle_is_required
*/
function sanitize_circle( key_prefix, clean, raw, circle_is_required ) {
// "boundary.circle", clean, raw, false
// the names we use to define the centroid
var mandatoryProps = [ 'lat', 'lon' ];

21
sanitiser/_geo_reverse.js

@ -1,5 +1,7 @@
var geo_common = require ('./_geo_common');
var check = require('check-types');
var defaults = require('../query/defaults');
var LAT_LON_IS_REQUIRED = true,
CIRCLE_IS_REQUIRED = false,
CIRCLE_MUST_BE_COMPLETE = false;
@ -20,20 +22,21 @@ module.exports = function sanitize( raw, clean ){
}
try {
// first verify that point.lat/point.lon are valid
geo_common.sanitize_point( 'point', clean, raw, LAT_LON_IS_REQUIRED );
// this hack is to allow point.lat/point.lon to be used interchanagbly
// with boundary.circle.lat/boundary.circle.lon
//
// if clean doesn't have boundary.circle.lat but clean has point.lat, set boundary.circle.lat to point.lat
if( !clean.hasOwnProperty('boundary.circle.lat') && clean.hasOwnProperty('point.lat') ){
raw['boundary.circle.lat'] = clean['point.lat'];
}
if( !clean.hasOwnProperty('boundary.circle.lon') && clean.hasOwnProperty('point.lon') ){
raw['boundary.circle.lon'] = clean['point.lon'];
// overwrite boundary.circle.lat/lon with point.lat/lon
raw['boundary.circle.lat'] = clean['point.lat'];
raw['boundary.circle.lon'] = clean['point.lon'];
// if no radius was passed, set the default
if (!check.assigned(raw['boundary.circle.radius'])) {
raw['boundary.circle.radius'] = defaults['boundary:circle:radius'];
}
// santize the boundary.circle
geo_common.sanitize_circle( 'boundary.circle', clean, raw, CIRCLE_IS_REQUIRED );
}
catch (err) {
messages.errors.push( err.message );

47
test/unit/sanitiser/_geo_reverse.js

@ -1,4 +1,5 @@
var sanitize = require('../../../sanitiser/_geo_reverse');
var defaults = require('../../../query/defaults');
module.exports.tests = {};
@ -54,6 +55,52 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
t.end();
});
test('boundary.circle.lat/lon should be overridden with point.lat/lon', function(t) {
var raw = {
'point.lat': '12.121212',
'point.lon': '21.212121',
'boundary.circle.lat': '13.131313',
'boundary.circle.lon': '31.313131'
};
var clean = {};
var errorsAndWarnings = sanitize(raw, clean);
t.equals(raw['boundary.circle.lat'], 12.121212, 'should be set to point.lat');
t.equals(raw['boundary.circle.lon'], 21.212121, 'should be set to point.lon');
t.equals(clean['boundary.circle.lat'], 12.121212, 'should be set to point.lat');
t.equals(clean['boundary.circle.lon'], 21.212121, 'should be set to point.lon');
t.end();
});
test('no boundary.circle.radius supplied should be set to default', function(t) {
var raw = {
'point.lat': '12.121212',
'point.lon': '21.212121'
};
var clean = {};
var errorsAndWarnings = sanitize(raw, clean);
t.equals(raw['boundary.circle.radius'], defaults['boundary:circle:radius'], 'should be from defaults');
t.equals(clean['boundary.circle.radius'], parseFloat(defaults['boundary:circle:radius']), 'should be same as raw');
t.end();
});
test('explicit boundary.circle.radius should be used instead of default', function(t) {
var raw = {
'point.lat': '12.121212',
'point.lon': '21.212121',
'boundary.circle.radius': '3248732857km' // this will never be the default
};
var clean = {};
var errorsAndWarnings = sanitize(raw, clean);
t.equals(raw['boundary.circle.radius'], '3248732857km', 'should be parsed float');
t.equals(clean['boundary.circle.radius'], 3248732857.0, 'should be copied from raw');
t.end();
});
};
module.exports.all = function (tape, common) {

2
test/unit/sanitiser/reverse.js

@ -4,11 +4,13 @@
var reverse = require('../../../sanitiser/reverse'),
sanitize = reverse.sanitize,
middleware = reverse.middleware,
defaults = require('../../../query/defaults'),
defaultError = 'missing param \'lat\'',
defaultClean = { 'point.lat': 0,
'point.lon': 0,
'boundary.circle.lat': 0,
'boundary.circle.lon': 0,
'boundary.circle.radius': parseFloat(defaults['boundary:circle:radius']),
types: {
},
size: 10,

Loading…
Cancel
Save