Browse Source

Standardize sanitizers to export setup function that returns sanitize and expected function

pull/942/head
Lily He 8 years ago
parent
commit
13a7b42de7
  1. 15
      sanitizer/_boundary_country.js
  2. 11
      sanitizer/_categories.js
  3. 6
      sanitizer/_city_name_standardizer.js
  4. 6
      sanitizer/_deprecate_quattroshapes.js
  5. 68
      sanitizer/_flag_bool.js
  6. 19
      sanitizer/_geo_autocomplete.js
  7. 16
      sanitizer/_geo_reverse.js
  8. 22
      sanitizer/_geo_search.js
  9. 8
      sanitizer/_geonames_deprecation.js
  10. 6
      sanitizer/_geonames_warnings.js
  11. 10
      sanitizer/_ids.js
  12. 6
      sanitizer/_iso2_to_iso3.js
  13. 37
      sanitizer/_location_bias.js
  14. 6
      sanitizer/_single_scalar_parameters.js
  15. 59
      sanitizer/_size.js
  16. 11
      sanitizer/_sources_and_layers.js
  17. 19
      sanitizer/_synthesize_analysis.js
  18. 118
      sanitizer/_targets.js
  19. 11
      sanitizer/_text.js
  20. 8
      sanitizer/_text_addressit.js
  21. 6
      sanitizer/_tokenizer.js
  22. 25
      test/unit/sanitizer/_boundary_country.js
  23. 27
      test/unit/sanitizer/_categories.js
  24. 20
      test/unit/sanitizer/_city_name_standardizer.js
  25. 10
      test/unit/sanitizer/_deprecate_quattroshapes.js
  26. 20
      test/unit/sanitizer/_flag_bool.js
  27. 10
      test/unit/sanitizer/_geo_reverse.js
  28. 12
      test/unit/sanitizer/_geonames_deprecation.js
  29. 12
      test/unit/sanitizer/_geonames_warnings.js
  30. 39
      test/unit/sanitizer/_ids.js
  31. 12
      test/unit/sanitizer/_iso2_to_iso3.js
  32. 24
      test/unit/sanitizer/_layers.js
  33. 26
      test/unit/sanitizer/_location_bias.js
  34. 14
      test/unit/sanitizer/_single_scalar_parameters.js
  35. 18
      test/unit/sanitizer/_size.js
  36. 14
      test/unit/sanitizer/_sources.js
  37. 31
      test/unit/sanitizer/_sources_and_layers.js
  38. 31
      test/unit/sanitizer/_synthesize_analysis.js
  39. 13
      test/unit/sanitizer/_text.js
  40. 30
      test/unit/sanitizer/_text_addressit.js
  41. 38
      test/unit/sanitizer/_tokenizer.js

15
sanitizer/_boundary_country.js

@ -1,7 +1,7 @@
var check = require('check-types'); const check = require('check-types');
var iso3166 = require('iso3166-1'); const iso3166 = require('iso3166-1');
function sanitize(raw, clean) { function _sanitize(raw, clean) {
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -37,4 +37,11 @@ function containsIsoCode(isoCode) {
return iso3166.is2(isoCode) || iso3166.is3(isoCode); return iso3166.is2(isoCode) || iso3166.is3(isoCode);
} }
module.exports = sanitize; function _expected(){
return [{ name: 'boundary.country' }];
}
module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

11
sanitizer/_categories.js

@ -1,4 +1,3 @@
var check = require('check-types'); var check = require('check-types');
var categoryTaxonomy = require('pelias-categories'); var categoryTaxonomy = require('pelias-categories');
@ -8,7 +7,7 @@ var ERRORS = {
}; };
// validate inputs, convert types and apply defaults // validate inputs, convert types and apply defaults
function sanitize( raw, clean, categories ) { function _sanitize( raw, clean, categories ) {
categories = categories || categoryTaxonomy; categories = categories || categoryTaxonomy;
@ -50,5 +49,11 @@ function sanitize( raw, clean, categories ) {
return messages; return messages;
} }
function _expected() {
return [{ name: 'categories' }];
}
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

6
sanitizer/_city_name_standardizer.js

@ -15,7 +15,7 @@ function transliterate(match) {
} }
// transliterate ft/mt/saint/sainte to fort/mount/st/ste, respectively // transliterate ft/mt/saint/sainte to fort/mount/st/ste, respectively
function sanitize(raw, clean) { function _sanitize(raw, clean) {
// error & warning messages // error & warning messages
// this function doesn't add any error or warning messages // this function doesn't add any error or warning messages
const messages = { errors: [], warnings: [] }; const messages = { errors: [], warnings: [] };
@ -44,4 +44,6 @@ function sanitize(raw, clean) {
} }
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

6
sanitizer/_deprecate_quattroshapes.js

@ -10,7 +10,7 @@ var _ = require('lodash');
@see: https://github.com/pelias/api/issues/442 @see: https://github.com/pelias/api/issues/442
**/ **/
function sanitize( raw, clean, opts ) { function _sanitize( raw, clean, opts ) {
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -38,4 +38,6 @@ function sanitize( raw, clean, opts ) {
return messages; return messages;
} }
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

68
sanitizer/_flag_bool.js

@ -5,38 +5,46 @@ var _ = require('lodash');
* *
* @param {string} paramName name of parameter being sanitized * @param {string} paramName name of parameter being sanitized
* @param {boolean} defaultValue value to set variable to if none specified * @param {boolean} defaultValue value to set variable to if none specified
* @returns {Function} * @returns {Object} object containing functions
*/ */
function setup( paramName, defaultValue ) { function _setup( paramName, defaultValue ) {
return function( raw, clean ){ /**
return sanitize( raw, clean, { * {object} opts
paramName: paramName, */
defaultValue: defaultValue
}); const opts = {
paramName: paramName,
defaultValue: defaultValue
}; };
}
/** return {
* Validate inputs, convert types and apply defaults /**
* * Validate inputs, convert types and apply defaults
* @param {object} raw *
* @param {object} clean * @param {object} raw
* @param {object} opts * @param {object} clean
* @returns {{errors: Array, warnings: Array}} * @returns {{errors: Array, warnings: Array}}
*/ */
function sanitize( raw, clean, opts ){
sanitize: function _sanitize( raw, clean){
// error & warning messages`1
var messages = { errors: [], warnings: [] }; // error & warning messages`1
var messages = { errors: [], warnings: [] };
if( !_.isUndefined( raw[opts.paramName] ) ){
clean[opts.paramName] = isTruthy( raw[opts.paramName] ); if( !_.isUndefined( raw[opts.paramName] ) ){
} clean[opts.paramName] = isTruthy( raw[opts.paramName] );
else { }
clean[opts.paramName] = opts.defaultValue; else {
} clean[opts.paramName] = opts.defaultValue;
return messages; }
} return messages;
}, // end of _sanitize function
expected: function _expected(){
return [{ name: 'private'}];
} // end of _expected function
}; // end of return object
} // end of _setup function
/** /**
* Determine if param value is "truthy" * Determine if param value is "truthy"
@ -47,4 +55,4 @@ function isTruthy(val) {
return _.includes( ['true', '1', 1, true], val ); return _.includes( ['true', '1', 1, true], val );
} }
module.exports = setup; module.exports = _setup;

19
sanitizer/_geo_autocomplete.js

@ -3,7 +3,7 @@ var LAT_LON_IS_REQUIRED = false;
var RECT_IS_REQUIRED = false; var RECT_IS_REQUIRED = false;
// validate inputs, convert types and apply defaults // validate inputs, convert types and apply defaults
module.exports = function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -17,4 +17,19 @@ module.exports = function sanitize( raw, clean ){
} }
return messages; return messages;
}; }
function _expected(){
return [
{ name: 'focus.point.lat' },
{ name: 'focus.point.lon' },
{ name: 'boundary.rect.min_lat' },
{ name: 'boundary.rect.max_lat' },
{ name: 'boundary.rect.min_lon' },
{ name: 'boundary.rect.max_lon' }];
}
module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

16
sanitizer/_geo_reverse.js

@ -7,7 +7,7 @@ var LAT_LON_IS_REQUIRED = true,
const non_coarse_layers = ['venue', 'address', 'street']; const non_coarse_layers = ['venue', 'address', 'street'];
// validate inputs, convert types and apply defaults // validate inputs, convert types and apply defaults
module.exports = function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -38,4 +38,16 @@ module.exports = function sanitize( raw, clean ){
} }
return messages; return messages;
}; }
function _expected(){
return [
{ name: 'point.lat' },
{ name: 'point.lon' },
{ name: 'boundary.circle.radius'}];
}
module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

22
sanitizer/_geo_search.js

@ -6,7 +6,7 @@ var RECT_IS_REQUIRED = false;
var CIRCLE_IS_REQUIRED = false; var CIRCLE_IS_REQUIRED = false;
// validate inputs, convert types and apply defaults // validate inputs, convert types and apply defaults
module.exports = function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -21,4 +21,22 @@ module.exports = function sanitize( raw, clean ){
} }
return messages; return messages;
}; }
function _expected(){
return [
{ name: 'focus.point.lat' },
{ name: 'focus.point.lon' },
{ name: 'boundary.circle.lon'},
{ name: 'boundary.circle.lat'},
{ name: 'boundary.circle.radius'},
{ name: 'boundary.rect.min_lat' },
{ name: 'boundary.rect.max_lat' },
{ name: 'boundary.rect.min_lon' },
{ name: 'boundary.rect.max_lon' }];
}
module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

8
sanitizer/_geonames_deprecation.js

@ -5,7 +5,7 @@ with the release of coarse reverse as a separate thing and ES reverse only
handling venues, addresses, and streets, geonames make no sense in the reverse context handling venues, addresses, and streets, geonames make no sense in the reverse context
**/ **/
function sanitize( raw, clean, opts ) { function _sanitize( raw, clean, opts ) {
// error & warning messages // error & warning messages
const messages = { errors: [], warnings: [] }; const messages = { errors: [], warnings: [] };
@ -19,7 +19,9 @@ function sanitize( raw, clean, opts ) {
} }
return messages; return messages;
} }
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

6
sanitizer/_geonames_warnings.js

@ -9,7 +9,7 @@ function hasAnyNonAdminFields(parsed_text) {
non_admin_fields)); non_admin_fields));
} }
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
const messages = { errors: [], warnings: [] }; const messages = { errors: [], warnings: [] };
@ -34,4 +34,6 @@ function sanitize( raw, clean ){
return messages; return messages;
} }
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

10
sanitizer/_ids.js

@ -52,7 +52,7 @@ function sanitizeId(rawId, messages) {
}; };
} }
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -84,5 +84,11 @@ function sanitize( raw, clean ){
return messages; return messages;
} }
function _expected(){
return [{ name: 'ids' }];
}
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

6
sanitizer/_iso2_to_iso3.js

@ -4,7 +4,7 @@ const iso3166 = require('iso3166-1');
// this sanitizer exists solely to convert an ISO2 country value to ISO3 // this sanitizer exists solely to convert an ISO2 country value to ISO3
// eg - 'TH' -> 'THA' // eg - 'TH' -> 'THA'
// this can go away once altnames imports ISO2 country values from WOF // this can go away once altnames imports ISO2 country values from WOF
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
const messages = { errors: [], warnings: [] }; const messages = { errors: [], warnings: [] };
@ -16,4 +16,6 @@ function sanitize( raw, clean ){
} }
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

37
sanitizer/_location_bias.js

@ -4,28 +4,29 @@ Set a focus.lat and focus.lon if specified in pelias config
* @param {object} defaultParameters property of pelias config * @param {object} defaultParameters property of pelias config
*/ */
function setup(defaultParameters){ function _setup(defaultParameters){
return {
sanitize: function sanitize(raw, clean){
/*
check that:
1. {object} raw exists
2. pelias-config included the properties focus.point.lat and focus.point.lon
3. raw.focus.point.lon and raw.focus.point.lat have not been set
*/
if (!_.isUndefined(raw) &&
!_.isUndefined(defaultParameters['focus.point.lat']) &&
!_.isUndefined(defaultParameters['focus.point.lon']) &&
!_.has(raw, 'focus.point.lon') &&
!_.has(raw, 'focus.point.lat') ) {
return function setLocationBias(raw, clean){ raw['focus.point.lat'] = defaultParameters['focus.point.lat'];
/* raw['focus.point.lon'] = defaultParameters['focus.point.lon'];
check that: }
1. {object} raw exists
2. pelias-config included the properties focus.point.lat and focus.point.lon
3. raw.focus.point.lon and raw.focus.point.lat have not been set
*/
if (!_.isUndefined(raw) &&
!_.isUndefined(defaultParameters['focus.point.lat']) &&
!_.isUndefined(defaultParameters['focus.point.lon']) &&
!_.has(raw, 'focus.point.lon') &&
!_.has(raw, 'focus.point.lat') ) {
raw['focus.point.lat'] = defaultParameters['focus.point.lat']; return { errors: [], warnings: [] };
raw['focus.point.lon'] = defaultParameters['focus.point.lon'];
} }
return { errors: [], warnings: [] };
}; };
} }
// if focus.point.lat and focus.point.lon already exists, don't change // if focus.point.lat and focus.point.lon already exists, don't change
module.exports = setup; module.exports = _setup;

6
sanitizer/_single_scalar_parameters.js

@ -3,7 +3,7 @@ var _ = require('lodash'),
check = require('check-types'); check = require('check-types');
// validate inputs // validate inputs
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -22,4 +22,6 @@ function sanitize( raw, clean ){
} }
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

59
sanitizer/_size.js

@ -5,40 +5,47 @@ var MIN_SIZE = 1,
DEFAULT_SIZE = 10; DEFAULT_SIZE = 10;
// validate inputs, convert types and apply defaults // validate inputs, convert types and apply defaults
function setup( size_min, size_max, size_def ){ function _setup( size_min, size_max, size_def ){
// allow caller to inject custom min/max/default values // allow caller to inject custom min/max/default values
if( !check.number( size_min ) ){ size_min = MIN_SIZE; } if( !check.number( size_min ) ){ size_min = MIN_SIZE; }
if( !check.number( size_max ) ){ size_max = MAX_SIZE; } if( !check.number( size_max ) ){ size_max = MAX_SIZE; }
if( !check.number( size_def ) ){ size_def = DEFAULT_SIZE; } if( !check.number( size_def ) ){ size_def = DEFAULT_SIZE; }
return function sanitize( raw, clean ){ return {
sanitize: function _sanitize( raw, clean ){
// error & warning messages
var messages = { errors: [], warnings: [] }; // error & warning messages
var messages = { errors: [], warnings: [] };
// coercions
clean.size = parseInt( raw.size, 10 ); // coercions
clean.size = parseInt( raw.size, 10 );
// invalid numeric input
if( isNaN( clean.size ) ){ // invalid numeric input
clean.size = size_def; if( isNaN( clean.size ) ){
clean.size = size_def;
}
// ensure size falls within defined range
else if( clean.size > size_max ){
// set the max size
messages.warnings.push('out-of-range integer \'size\', using MAX_SIZE');
clean.size = size_max;
}
else if( clean.size < size_min ){
// set the min size
messages.warnings.push('out-of-range integer \'size\', using MIN_SIZE');
clean.size = size_min;
}
return messages;
},
expected: function _expected() {
// add size as a valid parameter for joi
return [{ name: 'size' }];
} }
// ensure size falls within defined range
else if( clean.size > size_max ){
// set the max size
messages.warnings.push('out-of-range integer \'size\', using MAX_SIZE');
clean.size = size_max;
}
else if( clean.size < size_min ){
// set the min size
messages.warnings.push('out-of-range integer \'size\', using MIN_SIZE');
clean.size = size_min;
}
return messages;
}; };
} }
// export function // export function
module.exports = setup; module.exports = _setup;

11
sanitizer/_sources_and_layers.js

@ -5,7 +5,7 @@ var type_mapping = require( '../helper/type_mapping' );
* This sanitizer depends on clean.layers and clean.sources * This sanitizer depends on clean.layers and clean.sources
* so it has to be run after those sanitizers have been run * so it has to be run after those sanitizers have been run
*/ */
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
var possible_errors = []; var possible_errors = [];
@ -34,4 +34,11 @@ function sanitize( raw, clean ){
return messages; return messages;
} }
module.exports = sanitize; function _expected(){
return [{ 'name': 'sources' }, { 'name': 'layers' }];
}
module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

19
sanitizer/_synthesize_analysis.js

@ -35,7 +35,7 @@ function getHouseNumberField(analyzed_address) {
} }
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
const messages = { errors: [], warnings: [] }; const messages = { errors: [], warnings: [] };
@ -86,5 +86,20 @@ function sanitize( raw, clean ){
return messages; return messages;
} }
function _expected() {
return [
{ 'name': 'venue' },
{ 'name': 'address' },
{ 'name': 'neighbourhood' },
{ 'name': 'borough' },
{ 'name': 'locality' },
{ 'name': 'county' },
{ 'name': 'region' },
{ 'name': 'postalcode' },
{ 'name': 'country' }];
}
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

118
sanitizer/_targets.js

@ -5,70 +5,72 @@ function getValidKeys(mapping) {
return _.uniq(Object.keys(mapping)).join(','); return _.uniq(Object.keys(mapping)).join(',');
} }
function setup( paramName, targetMap ) { function _setup( paramName, targetMap ) {
return function( raw, clean ){ const opts = {
return sanitize( raw, clean, { paramName: paramName,
paramName: paramName, targetMap: targetMap,
targetMap: targetMap, targetMapKeysString: getValidKeys(targetMap)
targetMapKeysString: getValidKeys(targetMap)
});
}; };
}
function sanitize( raw, clean, opts ) { return {
// error & warning messages sanitize: function _sanitize( raw, clean ) {
var messages = { errors: [], warnings: [] }; // error & warning messages
var messages = { errors: [], warnings: [] };
// the string of targets (comma delimeted)
var targetsString = raw[opts.paramName]; // the string of targets (comma delimeted)
var targetsString = raw[opts.paramName];
// trim whitespace
if( check.nonEmptyString( targetsString ) ){ // trim whitespace
targetsString = targetsString.trim(); if( check.nonEmptyString( targetsString ) ){
targetsString = targetsString.trim();
// param must be a valid non-empty string
if( !check.nonEmptyString( targetsString ) ){ // param must be a valid non-empty string
messages.errors.push( if( !check.nonEmptyString( targetsString ) ){
opts.paramName + ' parameter cannot be an empty string. Valid options: ' + opts.targetMapKeysString messages.errors.push(
); opts.paramName + ' parameter cannot be an empty string. Valid options: ' + opts.targetMapKeysString
} );
else { }
else {
// split string in to array and lowercase each target string
var targets = targetsString.split(',').map( function( target ){ // split string in to array and lowercase each target string
return target.toLowerCase(); // lowercase inputs var targets = targetsString.split(',').map( function( target ){
}); return target.toLowerCase(); // lowercase inputs
});
// emit an error for each target *not* present in the targetMap
targets.filter( function( target ){
return !opts.targetMap.hasOwnProperty(target);
}).forEach( function( target ){
messages.errors.push(
'\'' + target + '\' is an invalid ' + opts.paramName + ' parameter. Valid options: ' + opts.targetMapKeysString
);
});
// only set types value when no error occured // emit an error for each target *not* present in the targetMap
if( !messages.errors.length ){ targets.filter( function( target ){
clean[opts.paramName] = targets.reduce(function(acc, target) { return !opts.targetMap.hasOwnProperty(target);
return acc.concat(opts.targetMap[target]); }).forEach( function( target ){
}, []); messages.errors.push(
'\'' + target + '\' is an invalid ' + opts.paramName + ' parameter. Valid options: ' + opts.targetMapKeysString
);
});
// dedupe in case aliases expanded to common things or user typed in duplicates // only set types value when no error occured
clean[opts.paramName] = _.uniq(clean[opts.paramName]); if( !messages.errors.length ){
clean[opts.paramName] = targets.reduce(function(acc, target) {
return acc.concat(opts.targetMap[target]);
}, []);
// dedupe in case aliases expanded to common things or user typed in duplicates
clean[opts.paramName] = _.uniq(clean[opts.paramName]);
}
}
} }
}
}
// string is empty // string is empty
else if( check.string( targetsString ) ){ else if( check.string( targetsString ) ){
messages.errors.push( messages.errors.push(
opts.paramName + ' parameter cannot be an empty string. Valid options: ' + opts.targetMapKeysString opts.paramName + ' parameter cannot be an empty string. Valid options: ' + opts.targetMapKeysString
); );
} }
return messages; return messages;
} } // end of _sanitize function
}; // end of object to be returned
} // end of _setup function
module.exports = setup; module.exports = _setup;

11
sanitizer/_text.js

@ -2,7 +2,8 @@ const check = require('check-types');
const _ = require('lodash'); const _ = require('lodash');
// validate texts, convert types and apply defaults // validate texts, convert types and apply defaults
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
const messages = { errors: [], warnings: [] }; const messages = { errors: [], warnings: [] };
@ -20,5 +21,11 @@ function sanitize( raw, clean ){
return messages; return messages;
} }
function _expected(){
return [{ name: 'text' }, { name: 'parsed_text' }];
}
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize,
expected: _expected
});

8
sanitizer/_text_addressit.js

@ -5,7 +5,7 @@ var _ = require('lodash');
var logger = require('pelias-logger').get('api'); var logger = require('pelias-logger').get('api');
// validate texts, convert types and apply defaults // validate texts, convert types and apply defaults
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -36,9 +36,9 @@ function sanitize( raw, clean ){
} }
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});
// this is the addressit functionality from https://github.com/pelias/text-analyzer/blob/master/src/addressItParser.js // this is the addressit functionality from https://github.com/pelias/text-analyzer/blob/master/src/addressItParser.js
var DELIM = ','; var DELIM = ',';

6
sanitizer/_tokenizer.js

@ -14,7 +14,7 @@ var check = require('check-types');
note: this sanitizer should run *after* the '_text' sanitizer so it can note: this sanitizer should run *after* the '_text' sanitizer so it can
use the output of clean.parsed_text where available. use the output of clean.parsed_text where available.
**/ **/
function sanitize( raw, clean ){ function _sanitize( raw, clean ){
// error & warning messages // error & warning messages
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
@ -103,4 +103,6 @@ function sanitize( raw, clean ){
} }
// export function // export function
module.exports = sanitize; module.exports = () => ({
sanitize: _sanitize
});

25
test/unit/sanitizer/_boundary_country.js

@ -1,4 +1,4 @@
var sanitize = require('../../../sanitizer/_boundary_country'); var sanitizer = require('../../../sanitizer/_boundary_country')();
module.exports.tests = {}; module.exports.tests = {};
@ -6,7 +6,7 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('raw w/o boundary should set boundary.country undefined', function(t) { test('raw w/o boundary should set boundary.country undefined', function(t) {
var raw = { }; var raw = { };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], undefined, 'should be undefined'); t.equals(clean['boundary.country'], undefined, 'should be undefined');
t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors'); t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors');
t.end(); t.end();
@ -15,7 +15,7 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('boundary.country explicitly undefined in raw should leave boundary.country undefined', function(t) { test('boundary.country explicitly undefined in raw should leave boundary.country undefined', function(t) {
var raw = { 'boundary.country': undefined }; var raw = { 'boundary.country': undefined };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], undefined, 'should be undefined'); t.equals(clean['boundary.country'], undefined, 'should be undefined');
t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors'); t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors');
t.end(); t.end();
@ -24,7 +24,7 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('non-string boundary.country should set boundary.country to undefined and return warning', function(t) { test('non-string boundary.country should set boundary.country to undefined and return warning', function(t) {
var raw = { 'boundary.country': ['this isn\'t a string primitive'] }; var raw = { 'boundary.country': ['this isn\'t a string primitive'] };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], undefined, 'should be undefined'); t.equals(clean['boundary.country'], undefined, 'should be undefined');
t.deepEquals(errorsAndWarnings, { errors: ['boundary.country is not a string'], warnings: [] }, 'non-string country warning'); t.deepEquals(errorsAndWarnings, { errors: ['boundary.country is not a string'], warnings: [] }, 'non-string country warning');
t.end(); t.end();
@ -33,7 +33,7 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('iso2 boundary.country in raw should set boundary.country to ISO3 uppercased', function(t) { test('iso2 boundary.country in raw should set boundary.country to ISO3 uppercased', function(t) {
var raw = { 'boundary.country': 'aq' }; var raw = { 'boundary.country': 'aq' };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], 'ATA', 'should be uppercased ISO3'); t.equals(clean['boundary.country'], 'ATA', 'should be uppercased ISO3');
t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors'); t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors');
t.end(); t.end();
@ -42,7 +42,7 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('iso3 boundary.country in raw should set boundary.country to matching ISO3 uppercased', function(t) { test('iso3 boundary.country in raw should set boundary.country to matching ISO3 uppercased', function(t) {
var raw = { 'boundary.country': 'aTa' }; var raw = { 'boundary.country': 'aTa' };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], 'ATA', 'should be uppercased ISO3'); t.equals(clean['boundary.country'], 'ATA', 'should be uppercased ISO3');
t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors'); t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }, 'no warnings or errors');
t.end(); t.end();
@ -51,7 +51,7 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('unknown 2-character boundary.country should set boundary.country to undefined', function(t) { test('unknown 2-character boundary.country should set boundary.country to undefined', function(t) {
var raw = { 'boundary.country': 'zq' }; var raw = { 'boundary.country': 'zq' };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], undefined, 'should be undefined'); t.equals(clean['boundary.country'], undefined, 'should be undefined');
t.deepEquals(errorsAndWarnings, { errors: ['zq is not a valid ISO2/ISO3 country code'], warnings: [] }, 'country not found warning`'); t.deepEquals(errorsAndWarnings, { errors: ['zq is not a valid ISO2/ISO3 country code'], warnings: [] }, 'country not found warning`');
t.end(); t.end();
@ -60,17 +60,24 @@ module.exports.tests.sanitize_boundary_country = function(test, common) {
test('unknown 3-character boundary.country should set boundary.country to undefined', function(t) { test('unknown 3-character boundary.country should set boundary.country to undefined', function(t) {
var raw = { 'boundary.country': 'zqx' }; var raw = { 'boundary.country': 'zqx' };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.country'], undefined, 'should be undefined'); t.equals(clean['boundary.country'], undefined, 'should be undefined');
t.deepEquals(errorsAndWarnings, { errors: ['zqx is not a valid ISO2/ISO3 country code'], warnings: [] }, 'country not found warning`'); t.deepEquals(errorsAndWarnings, { errors: ['zqx is not a valid ISO2/ISO3 country code'], warnings: [] }, 'country not found warning`');
t.end(); t.end();
}); });
test('return an array of valid parameters in object form for Joi schema validation', (t) => {
const expected = [{ name: 'boundary.country' }];
const validParameters = sanitizer.expected();
t.deepEquals(validParameters, expected);
t.end();
});
}; };
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _boundary_country ' + name, testFunction); return tape('SANITIZE _boundary_country ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

27
test/unit/sanitizer/_categories.js

@ -1,4 +1,4 @@
var sanitize = require( '../../../sanitizer/_categories'); var sanitizer = require( '../../../sanitizer/_categories')();
module.exports.tests = {}; module.exports.tests = {};
@ -9,7 +9,7 @@ module.exports.tests.no_categories = function(test, common) {
clean: { } clean: { }
}; };
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.equal(req.clean.categories, undefined, 'no categories should be defined'); t.equal(req.clean.categories, undefined, 'no categories should be defined');
t.deepEqual(messages.errors, [], 'no error returned'); t.deepEqual(messages.errors, [], 'no error returned');
@ -27,7 +27,7 @@ module.exports.tests.no_categories = function(test, common) {
var expected_error = 'Categories parameter cannot be left blank. See documentation of service for valid options.'; var expected_error = 'Categories parameter cannot be left blank. See documentation of service for valid options.';
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.equal(req.clean.categories, undefined, 'no categories should be defined'); t.equal(req.clean.categories, undefined, 'no categories should be defined');
t.deepEqual(messages.errors.length, 1, 'error returned'); t.deepEqual(messages.errors.length, 1, 'error returned');
@ -46,7 +46,7 @@ module.exports.tests.no_categories = function(test, common) {
var expected_error = 'Invalid categories parameter value(s). See documentation of service for valid options.'; var expected_error = 'Invalid categories parameter value(s). See documentation of service for valid options.';
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.equal(req.clean.categories, undefined, 'no categories should be defined'); t.equal(req.clean.categories, undefined, 'no categories should be defined');
t.deepEqual(messages.errors.length, 1, 'error returned'); t.deepEqual(messages.errors.length, 1, 'error returned');
@ -74,7 +74,7 @@ module.exports.tests.valid_categories = function(test, common) {
clean: { } clean: { }
}; };
var messages = sanitize(req.query, req.clean, validCategories); var messages = sanitizer.sanitize(req.query, req.clean, validCategories);
t.deepEqual(req.clean.categories, ['food'], 'categories should contain food'); t.deepEqual(req.clean.categories, ['food'], 'categories should contain food');
t.deepEqual(messages.errors, [], 'no error returned'); t.deepEqual(messages.errors, [], 'no error returned');
@ -95,7 +95,7 @@ module.exports.tests.valid_categories = function(test, common) {
}; };
var expectedCategories = ['food', 'health']; var expectedCategories = ['food', 'health'];
var messages = sanitize(req.query, req.clean, validCategories); var messages = sanitizer.sanitize(req.query, req.clean, validCategories);
t.deepEqual(req.clean.categories, expectedCategories, t.deepEqual(req.clean.categories, expectedCategories,
'clean.categories should be an array with proper values'); 'clean.categories should be an array with proper values');
@ -130,7 +130,7 @@ module.exports.tests.invalid_categories = function(test, common) {
warnings: [] warnings: []
}; };
var messages = sanitize(req.query, req.clean, validCategories); var messages = sanitizer.sanitize(req.query, req.clean, validCategories);
t.deepEqual(messages, expected_messages, 'error with message returned'); t.deepEqual(messages, expected_messages, 'error with message returned');
t.equal(req.clean.categories, undefined, 'clean.categories should remain empty'); t.equal(req.clean.categories, undefined, 'clean.categories should remain empty');
@ -151,17 +151,26 @@ module.exports.tests.invalid_categories = function(test, common) {
warnings: [] warnings: []
}; };
var messages = sanitize(req.query, req.clean, validCategories); var messages = sanitizer.sanitize(req.query, req.clean, validCategories);
t.deepEqual(messages, expected_messages, 'error with message returned'); t.deepEqual(messages, expected_messages, 'error with message returned');
t.equal(req.clean.categories, undefined, 'clean.categories should remain empty'); t.equal(req.clean.categories, undefined, 'clean.categories should remain empty');
t.end(); t.end();
}); });
test('return an array of valid parameters in object form for Joi schema validation', (t) => {
const expected = [{ name: 'categories' }];
const validParameters = sanitizer.expected();
t.deepEquals(validParameters, expected);
t.end();
});
}; };
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _categories ' + name, testFunction); return tape('SANITIZE _categories ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

20
test/unit/sanitizer/_city_name_standardizer.js

@ -1,5 +1,5 @@
const _ = require('lodash'); const _ = require('lodash');
const sanitizer = require('../../../sanitizer/_city_name_standardizer'); const sanitizer = require('../../../sanitizer/_city_name_standardizer')();
module.exports.tests = {}; module.exports.tests = {};
@ -13,7 +13,7 @@ module.exports.tests.text_parser = function(test, common) {
const expected_clean = { const expected_clean = {
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -39,7 +39,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -77,7 +77,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -115,7 +115,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -153,7 +153,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -191,7 +191,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -215,7 +215,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -239,7 +239,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -263,7 +263,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');

10
test/unit/sanitizer/_deprecate_quattroshapes.js

@ -1,4 +1,4 @@
var sanitize = require('../../../sanitizer/_deprecate_quattroshapes'); var sanitizer = require('../../../sanitizer/_deprecate_quattroshapes')();
module.exports.tests = {}; module.exports.tests = {};
@ -7,7 +7,7 @@ module.exports.tests.warning_message_1 = function(test, common) {
var raw = { sources: 'qs' }; var raw = { sources: 'qs' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEquals(messages, { t.deepEquals(messages, {
errors: [], errors: [],
warnings: ['You are using Quattroshapes as a data source in this query. ' + warnings: ['You are using Quattroshapes as a data source in this query. ' +
@ -27,7 +27,7 @@ module.exports.tests.warning_message_2 = function(test, common) {
var raw = { sources: 'quattroshapes' }; var raw = { sources: 'quattroshapes' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEquals(messages, { t.deepEquals(messages, {
errors: [], errors: [],
warnings: ['You are using Quattroshapes as a data source in this query. ' + warnings: ['You are using Quattroshapes as a data source in this query. ' +
@ -47,7 +47,7 @@ module.exports.tests.rewrite = function(test, common) {
var raw = { sources: 'qs,quattroshapes,qs,quattroshapes,osm' }; var raw = { sources: 'qs,quattroshapes,qs,quattroshapes,osm' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
t.equals(raw.sources,'osm,whosonfirst','use wof instead of qs'); t.equals(raw.sources,'osm,whosonfirst','use wof instead of qs');
t.end(); t.end();
@ -56,7 +56,7 @@ module.exports.tests.rewrite = function(test, common) {
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _deprecate_quattroshapes ' + name, testFunction); return tape('SANITIZE _deprecate_quattroshapes ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

20
test/unit/sanitizer/_flag_bool.js

@ -1,5 +1,4 @@
var sanitizer = require('../../../sanitizer/_flag_bool'); var sanitizer = require('../../../sanitizer/_flag_bool');
var sanitize = sanitizer('dirty_param', true);
module.exports.tests = {}; module.exports.tests = {};
@ -9,7 +8,7 @@ module.exports.tests.sanitize_private = function(test, common) {
test('invalid dirty_param ' + value, function (t) { test('invalid dirty_param ' + value, function (t) {
var raw = {dirty_param: value}; var raw = {dirty_param: value};
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer('dirty_param', true).sanitize(raw, clean);
t.equal(clean.dirty_param, false, 'default clean value set (to false)'); t.equal(clean.dirty_param, false, 'default clean value set (to false)');
t.end(); t.end();
}); });
@ -20,7 +19,7 @@ module.exports.tests.sanitize_private = function(test, common) {
test('valid dirty_param ' + value, function (t) { test('valid dirty_param ' + value, function (t) {
var raw = {dirty_param: value}; var raw = {dirty_param: value};
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer('dirty_param', true).sanitize(raw, clean);
t.equal(clean.dirty_param, true, 'clean value set to true'); t.equal(clean.dirty_param, true, 'clean value set to true');
t.end(); t.end();
}); });
@ -31,7 +30,7 @@ module.exports.tests.sanitize_private = function(test, common) {
test('test setting false explicitly ' + value, function (t) { test('test setting false explicitly ' + value, function (t) {
var raw = {dirty_param: value}; var raw = {dirty_param: value};
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer('dirty_param', true).sanitize(raw, clean);
t.equal(clean.dirty_param, false, 'clean value set to false'); t.equal(clean.dirty_param, false, 'clean value set to false');
t.end(); t.end();
}); });
@ -45,17 +44,26 @@ module.exports.tests.validate_default_behavior = function(test, common) {
var sanitize_true = sanitizer('foo_bar', defaultValue); var sanitize_true = sanitizer('foo_bar', defaultValue);
var raw = {}; var raw = {};
var clean = {}; var clean = {};
sanitize_true(raw, clean); sanitize_true.sanitize(raw, clean);
t.equal(clean.foo_bar, defaultValue, 'foo_bar set to ' + defaultValue); t.equal(clean.foo_bar, defaultValue, 'foo_bar set to ' + defaultValue);
t.end(); t.end();
}); });
}); });
}; };
module.exports.tests.check_valid_parameters = function(test, common) {
test('return an array of valid parameters in object form for Joi schema validation', (t) => {
const expected = [{ name: 'private' }];
const validParameters = sanitizer('dirty_param', true).expected();
t.deepEquals(validParameters, expected);
t.end();
});
};
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _flag_bool: ' + name, testFunction); return tape('SANITIZE _flag_bool: ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

10
test/unit/sanitizer/_geo_reverse.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const sanitize = require('../../../sanitizer/_geo_reverse'); const sanitizer = require('../../../sanitizer/_geo_reverse')();
const defaults = require('../../../query/reverse_defaults'); const defaults = require('../../../query/reverse_defaults');
module.exports.tests = {}; module.exports.tests = {};
@ -13,7 +13,7 @@ module.exports.tests.warning_situations = (test, common) => {
'boundary.circle.lat': '13.131313' 'boundary.circle.lat': '13.131313'
}; };
const clean = {}; const clean = {};
const errorsAndWarnings = sanitize(raw, clean); const errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.circle.lat'], 12.121212, 'should be set to point.lat'); t.equals(clean['boundary.circle.lat'], 12.121212, 'should be set to point.lat');
t.deepEquals(errorsAndWarnings, { t.deepEquals(errorsAndWarnings, {
@ -31,7 +31,7 @@ module.exports.tests.warning_situations = (test, common) => {
'boundary.circle.lon': '31.313131' 'boundary.circle.lon': '31.313131'
}; };
const clean = {}; const clean = {};
const errorsAndWarnings = sanitize(raw, clean); const errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(clean['boundary.circle.lon'], 21.212121, 'should be set to point.lon'); t.equals(clean['boundary.circle.lon'], 21.212121, 'should be set to point.lon');
t.deepEquals(errorsAndWarnings, { t.deepEquals(errorsAndWarnings, {
@ -49,7 +49,7 @@ module.exports.tests.warning_situations = (test, common) => {
'boundary.circle.radius': '17' 'boundary.circle.radius': '17'
}; };
const clean = {}; const clean = {};
const errorsAndWarnings = sanitize(raw, clean); const errorsAndWarnings = sanitizer.sanitize(raw, clean);
// t.equals(clean['boundary.circle.radius'], 12.121212, 'should be set to point.lat') // t.equals(clean['boundary.circle.radius'], 12.121212, 'should be set to point.lat')
t.deepEquals(errorsAndWarnings, { t.deepEquals(errorsAndWarnings, {
@ -70,7 +70,7 @@ module.exports.tests.success_conditions = (test, common) => {
'boundary.circle.radius': '3248732857km' // this will never be the default 'boundary.circle.radius': '3248732857km' // this will never be the default
}; };
const clean = {}; const clean = {};
const errorsAndWarnings = sanitize(raw, clean); const errorsAndWarnings = sanitizer.sanitize(raw, clean);
t.equals(raw['boundary.circle.lat'], 12.121212); t.equals(raw['boundary.circle.lat'], 12.121212);
t.equals(raw['boundary.circle.lon'], 21.212121); t.equals(raw['boundary.circle.lon'], 21.212121);

12
test/unit/sanitizer/_geonames_deprecation.js

@ -1,4 +1,4 @@
const geonames_deprecation = require('../../../sanitizer/_geonames_deprecation'); const sanitizer = require('../../../sanitizer/_geonames_deprecation')();
module.exports.tests = {}; module.exports.tests = {};
@ -6,7 +6,7 @@ module.exports.tests.no_warnings_or_errors_conditions = (test, common) => {
test('undefined sources should add neither warnings nor errors', (t) => { test('undefined sources should add neither warnings nor errors', (t) => {
const clean = {}; const clean = {};
const messages = geonames_deprecation(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(clean, {}); t.deepEquals(clean, {});
t.deepEquals(messages, { errors: [], warnings: [] }); t.deepEquals(messages, { errors: [], warnings: [] });
@ -19,7 +19,7 @@ module.exports.tests.no_warnings_or_errors_conditions = (test, common) => {
sources: ['source 1', 'source 2'], sources: ['source 1', 'source 2'],
}; };
const messages = geonames_deprecation(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(clean.sources, ['source 1', 'source 2']); t.deepEquals(clean.sources, ['source 1', 'source 2']);
t.deepEquals(messages, { errors: [], warnings: [] }); t.deepEquals(messages, { errors: [], warnings: [] });
@ -36,7 +36,7 @@ module.exports.tests.error_conditions = (test, common) => {
sources: [sources] sources: [sources]
}; };
const messages = geonames_deprecation(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(clean.sources, [sources]); t.deepEquals(clean.sources, [sources]);
t.deepEquals(messages.errors, ['/reverse does not support geonames']); t.deepEquals(messages.errors, ['/reverse does not support geonames']);
@ -57,7 +57,7 @@ module.exports.tests.warning_conditions = (test, common) => {
sources: ['another source', sources, 'yet another source'] sources: ['another source', sources, 'yet another source']
}; };
const messages = geonames_deprecation(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(clean.sources, ['another source', 'yet another source']); t.deepEquals(clean.sources, ['another source', 'yet another source']);
t.deepEquals(messages.errors, []); t.deepEquals(messages.errors, []);
@ -73,7 +73,7 @@ module.exports.tests.warning_conditions = (test, common) => {
module.exports.all = (tape, common) => { module.exports.all = (tape, common) => {
function test(name, testFunction) { function test(name, testFunction) {
return tape(`SANTIZE _geonames_deprecation ${name}`, testFunction); return tape(`SANITIZE _geonames_deprecation ${name}`, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

12
test/unit/sanitizer/_geonames_warnings.js

@ -1,6 +1,6 @@
const _ = require('lodash'); const _ = require('lodash');
const geonames_warnings = require('../../../sanitizer/_geonames_warnings'); const sanitizer = require('../../../sanitizer/_geonames_warnings')();
const nonAdminProperties = ['number', 'street', 'query', 'category']; const nonAdminProperties = ['number', 'street', 'query', 'category'];
const adminProperties = ['neighbourhood', 'borough', 'city', 'county', 'state', 'postalcode', 'country']; const adminProperties = ['neighbourhood', 'borough', 'city', 'county', 'state', 'postalcode', 'country'];
@ -13,7 +13,7 @@ module.exports.tests.no_errors = (test, common) => {
sources: ['geonames'], sources: ['geonames'],
}; };
const messages = geonames_warnings(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(messages, { errors: [], warnings: [] }); t.deepEquals(messages, { errors: [], warnings: [] });
t.end(); t.end();
@ -30,7 +30,7 @@ module.exports.tests.no_errors = (test, common) => {
clean.parsed_text[nonAdminProperty] = `${nonAdminProperty} value`; clean.parsed_text[nonAdminProperty] = `${nonAdminProperty} value`;
clean.parsed_text[adminProperty] = `${adminProperty} value`; clean.parsed_text[adminProperty] = `${adminProperty} value`;
const messages = geonames_warnings(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(messages, { errors: [], warnings: [] }); t.deepEquals(messages, { errors: [], warnings: [] });
@ -50,7 +50,7 @@ module.exports.tests.no_errors = (test, common) => {
clean.parsed_text[nonAdminProperty] = `${nonAdminProperty} value`; clean.parsed_text[nonAdminProperty] = `${nonAdminProperty} value`;
clean.parsed_text[adminProperty] = `${adminProperty} value`; clean.parsed_text[adminProperty] = `${adminProperty} value`;
const messages = geonames_warnings(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(messages, { errors: [], warnings: [] }); t.deepEquals(messages, { errors: [], warnings: [] });
@ -68,7 +68,7 @@ module.exports.tests.error_conditions = (test, common) => {
const clean = _.set({ sources: ['geonames'] }, const clean = _.set({ sources: ['geonames'] },
['parsed_text', property], `${property} value`); ['parsed_text', property], `${property} value`);
const messages = geonames_warnings(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(messages.errors, ['input contains only administrative area data, ' + t.deepEquals(messages.errors, ['input contains only administrative area data, ' +
'no results will be returned when sources=geonames']); 'no results will be returned when sources=geonames']);
@ -87,7 +87,7 @@ module.exports.tests.warning_conditions = (test, common) => {
const clean = _.set({ sources: ['source 1', 'geonames', 'source 2'] }, const clean = _.set({ sources: ['source 1', 'geonames', 'source 2'] },
['parsed_text', property], `${property} value`); ['parsed_text', property], `${property} value`);
const messages = geonames_warnings(undefined, clean); const messages = sanitizer.sanitize(undefined, clean);
t.deepEquals(messages.errors, []); t.deepEquals(messages.errors, []);
t.deepEquals(messages.warnings, ['input contains only administrative area data, ' + t.deepEquals(messages.warnings, ['input contains only administrative area data, ' +

39
test/unit/sanitizer/_ids.js

@ -1,4 +1,4 @@
var sanitize = require('../../../sanitizer/_ids'); var sanitizer = require('../../../sanitizer/_ids')();
var delimiter = ':'; var delimiter = ':';
var type_mapping = require('../../../helper/type_mapping'); var type_mapping = require('../../../helper/type_mapping');
@ -15,7 +15,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var raw = { ids: '' }; var raw = { ids: '' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], lengthError, 'ids length error returned'); t.equal(messages.errors[0], lengthError, 'ids length error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -26,7 +26,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var raw = { ids: ':' }; var raw = { ids: ':' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], formatError(':'), 'format error returned'); t.equal(messages.errors[0], formatError(':'), 'format error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -37,7 +37,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var raw = { ids: '::' }; var raw = { ids: '::' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], formatError('::'), 'format error returned'); t.equal(messages.errors[0], formatError('::'), 'format error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -48,7 +48,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var raw = { ids: 'geoname:' }; var raw = { ids: 'geoname:' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], formatError('geoname:'), 'format error returned'); t.equal(messages.errors[0], formatError('geoname:'), 'format error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -59,7 +59,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var raw = { ids: ':234' }; var raw = { ids: ':234' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], formatError(':234'), 'format error returned'); t.equal(messages.errors[0], formatError(':234'), 'format error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -72,7 +72,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var expected_error = 'invalidsource is invalid. It must be one of these values - [' + var expected_error = 'invalidsource is invalid. It must be one of these values - [' +
Object.keys(type_mapping.source_mapping).join(', ') + ']'; Object.keys(type_mapping.source_mapping).join(', ') + ']';
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], expected_error, 'format error returned'); t.equal(messages.errors[0], expected_error, 'format error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -83,7 +83,7 @@ module.exports.tests.invalid_ids = function(test, common) {
var raw = { ids: 'geonames:23' }; var raw = { ids: 'geonames:23' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors[0], formatError('geonames:23'), 'format error returned'); t.equal(messages.errors[0], formatError('geonames:23'), 'format error returned');
t.equal(clean.ids, undefined, 'ids unset in clean object'); t.equal(clean.ids, undefined, 'ids unset in clean object');
@ -96,7 +96,7 @@ module.exports.tests.valid_ids = function(test, common) {
var raw = { ids: 'openaddresses:address:20' }; var raw = { ids: 'openaddresses:address:20' };
var clean = {}; var clean = {};
var messages = sanitize( raw, clean ); var messages = sanitizer.sanitize( raw, clean );
var expected_ids = [{ var expected_ids = [{
source: 'openaddresses', source: 'openaddresses',
@ -112,7 +112,7 @@ test('ids: valid short input (openaddresses)', function(t) {
var raw = { ids: 'oa:address:20' }; var raw = { ids: 'oa:address:20' };
var clean = {}; var clean = {};
var messages = sanitize( raw, clean ); var messages = sanitizer.sanitize( raw, clean );
var expected_ids = [{ var expected_ids = [{
source: 'openaddresses', source: 'openaddresses',
@ -133,7 +133,7 @@ test('ids: valid short input (openaddresses)', function(t) {
id: 'node:500', id: 'node:500',
}]; }];
var messages = sanitize( raw, clean ); var messages = sanitizer.sanitize( raw, clean );
t.deepEqual( messages.errors, [], ' no errors'); t.deepEqual( messages.errors, [], ' no errors');
t.deepEqual( clean.ids, expected_ids, 'osm has node: or way: in id field'); t.deepEqual( clean.ids, expected_ids, 'osm has node: or way: in id field');
@ -149,7 +149,7 @@ test('ids: valid short input (openaddresses)', function(t) {
id: 'node:500', id: 'node:500',
}]; }];
var messages = sanitize( raw, clean ); var messages = sanitizer.sanitize( raw, clean );
t.deepEqual( messages.errors, [], ' no errors'); t.deepEqual( messages.errors, [], ' no errors');
t.deepEqual( clean.ids, expected_ids, 'osm has node: or way: in id field'); t.deepEqual( clean.ids, expected_ids, 'osm has node: or way: in id field');
@ -162,7 +162,7 @@ module.exports.tests.multiple_ids = function(test, common) {
var raw = { ids: 'geonames:venue:1,openstreetmap:address:way:2' }; var raw = { ids: 'geonames:venue:1,openstreetmap:address:way:2' };
var clean = {}; var clean = {};
var messages = sanitize( raw, clean); var messages = sanitizer.sanitize( raw, clean);
var expected_ids = [ { var expected_ids = [ {
source: 'geonames', source: 'geonames',
@ -186,7 +186,7 @@ module.exports.tests.de_dupe = function(test, common) {
var raw = { ids: 'geonames:venue:1,openstreetmap:venue:node:2,geonames:venue:1' }; var raw = { ids: 'geonames:venue:1,openstreetmap:venue:node:2,geonames:venue:1' };
var clean = {}; var clean = {};
var messages = sanitize( raw, clean ); var messages = sanitizer.sanitize( raw, clean );
var expected_ids = [ { var expected_ids = [ {
source: 'geonames', source: 'geonames',
@ -204,9 +204,18 @@ module.exports.tests.de_dupe = function(test, common) {
}); });
}; };
module.exports.tests.valid_Parameters = function(test, common) {
test('return an array of valid parameters in object form for Joi schema validation', (t) => {
const expected = [{ name: 'ids' }];
const validParameters = sanitizer.expected();
t.deepEquals(validParameters, expected);
t.end();
});
};
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _ids ' + name, testFunction); return tape('SANITIZE _ids ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

12
test/unit/sanitizer/_iso2_to_iso3.js

@ -1,4 +1,4 @@
const sanitizer = require('../../../sanitizer/_iso2_to_iso3'); const sanitizer = require('../../../sanitizer/_iso2_to_iso3')();
module.exports.tests = {}; module.exports.tests = {};
@ -12,7 +12,7 @@ module.exports.tests.text_parser = function(test, common) {
const expected_clean = { const expected_clean = {
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -38,7 +38,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -64,7 +64,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -90,7 +90,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -103,7 +103,7 @@ module.exports.tests.text_parser = function(test, common) {
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('sanitizer _iso2_to_iso3: ' + name, testFunction); return tape('SANITIZE _iso2_to_iso3: ' + name, testFunction);
} }
for( const testCase in module.exports.tests ){ for( const testCase in module.exports.tests ){

24
test/unit/sanitizer/_layers.js

@ -1,12 +1,12 @@
var type_mapping = require('../../../helper/type_mapping'); var type_mapping = require('../../../helper/type_mapping');
var sanitize = require('../../../sanitizer/_targets')('layers', type_mapping.layer_mapping); var sanitizer = require('../../../sanitizer/_targets')('layers', type_mapping.layer_mapping);
module.exports.tests = {}; module.exports.tests = {};
module.exports.tests.sanitize_layers = function(test, common) { module.exports.tests.sanitize_layers = function(test, common) {
test('unspecified', function(t) { test('unspecified', function(t) {
var messages = sanitize({ layers: undefined }, {}); var messages = sanitizer.sanitize({ layers: undefined }, {});
t.equal(messages.errors.length, 0, 'no errors'); t.equal(messages.errors.length, 0, 'no errors');
t.end(); t.end();
}); });
@ -15,7 +15,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'test_layer' }; var raw = { layers: 'test_layer' };
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
var msg = ' is an invalid layers parameter. Valid options: '; var msg = ' is an invalid layers parameter. Valid options: ';
t.equal(messages.errors.length, 1, 'errors set'); t.equal(messages.errors.length, 1, 'errors set');
@ -28,7 +28,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'venue' }; var raw = { layers: 'venue' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var venue_layers = ['venue']; var venue_layers = ['venue'];
t.deepEqual(clean.layers, venue_layers, 'venue layers set'); t.deepEqual(clean.layers, venue_layers, 'venue layers set');
@ -39,7 +39,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'coarse' }; var raw = { layers: 'coarse' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var admin_layers = [ 'continent', 'country', 'dependency', var admin_layers = [ 'continent', 'country', 'dependency',
'macroregion', 'region', 'locality', 'localadmin', 'macrocounty', 'county', 'macroregion', 'region', 'locality', 'localadmin', 'macrocounty', 'county',
@ -53,7 +53,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'address' }; var raw = { layers: 'address' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
t.deepEqual(clean.layers, ['address'], 'address layer set'); t.deepEqual(clean.layers, ['address'], 'address layer set');
t.end(); t.end();
@ -63,7 +63,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'venue,country,region' }; var raw = { layers: 'venue,country,region' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var expected_layers = ['venue', 'country', 'region']; var expected_layers = ['venue', 'country', 'region'];
t.deepEqual(clean.layers, expected_layers, 'venue + regular layers'); t.deepEqual(clean.layers, expected_layers, 'venue + regular layers');
@ -74,7 +74,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'coarse,country' }; var raw = { layers: 'coarse,country' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var expected_layers = [ 'continent', 'country', 'dependency', var expected_layers = [ 'continent', 'country', 'dependency',
'macroregion', 'region', 'locality', 'localadmin', 'macrocounty', 'county', 'macroregion', 'region', 'locality', 'localadmin', 'macrocounty', 'county',
@ -88,7 +88,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'address,country,locality' }; var raw = { layers: 'address,country,locality' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var expected_layers = ['address', 'country', 'locality' ]; var expected_layers = ['address', 'country', 'locality' ];
t.deepEqual(clean.layers, expected_layers, 'address + regular layers set'); t.deepEqual(clean.layers, expected_layers, 'address + regular layers set');
@ -99,7 +99,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'venue,country' }; var raw = { layers: 'venue,country' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var expected_layers = ['venue', 'country']; var expected_layers = ['venue', 'country'];
t.deepEqual(clean.layers, expected_layers, 'venue layers found (no duplicates)'); t.deepEqual(clean.layers, expected_layers, 'venue layers found (no duplicates)');
@ -110,7 +110,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
var raw = { layers: 'venue,coarse' }; var raw = { layers: 'venue,coarse' };
var clean = {}; var clean = {};
sanitize(raw, clean); sanitizer.sanitize(raw, clean);
var coarse_layers = [ 'continent', var coarse_layers = [ 'continent',
'country', 'dependency', 'macroregion', 'region', 'locality', 'localadmin', 'country', 'dependency', 'macroregion', 'region', 'locality', 'localadmin',
@ -126,7 +126,7 @@ module.exports.tests.sanitize_layers = function(test, common) {
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _layers ' + name, testFunction); return tape('SANITIZE _layers ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

26
test/unit/sanitizer/_location_bias.js

@ -1,4 +1,4 @@
const setup = require('../../../sanitizer/_location_bias'); const sanitizer = require('../../../sanitizer/_location_bias');
module.exports.tests = {}; module.exports.tests = {};
@ -8,14 +8,14 @@ module.exports.tests.setLocationBias = function(test, common) {
'focus.point.lat': 12.12121212, 'focus.point.lat': 12.12121212,
'focus.point.lon': 21.21212121 'focus.point.lon': 21.21212121
}; };
const locationBias = setup(defaultParameters); const locationBias = sanitizer(defaultParameters);
const raw = {}; const raw = {};
const expected = { const expected = {
'focus.point.lat': 12.12121212, 'focus.point.lat': 12.12121212,
'focus.point.lon': 21.21212121 'focus.point.lon': 21.21212121
}; };
locationBias(raw, undefined); locationBias.sanitize(raw, undefined);
t.deepEqual(raw, expected, 'focus point should be set'); t.deepEqual(raw, expected, 'focus point should be set');
t.end(); t.end();
@ -26,9 +26,9 @@ module.exports.tests.setLocationBias = function(test, common) {
'focus.point.lat': 12.12121212, 'focus.point.lat': 12.12121212,
'focus.point.lon': 21.21212121 'focus.point.lon': 21.21212121
}; };
const locationBias = setup(defaultParameters); const locationBias = sanitizer(defaultParameters);
locationBias(undefined, undefined); locationBias.sanitize(undefined, undefined);
t.deepEqual(undefined, undefined, 'should be unmodified' ); t.deepEqual(undefined, undefined, 'should be unmodified' );
t.end(); t.end();
}); });
@ -37,11 +37,11 @@ module.exports.tests.setLocationBias = function(test, common) {
const defaultParameters = { const defaultParameters = {
'focus.point.lon': 12.2121212 'focus.point.lon': 12.2121212
}; };
const locationBias = setup(defaultParameters); const locationBias = sanitizer(defaultParameters);
const raw = {}; const raw = {};
const expected = {}; const expected = {};
locationBias(raw, undefined); locationBias.sanitize(raw, undefined);
t.deepEqual(raw, expected, 'should be unmodified' ); t.deepEqual(raw, expected, 'should be unmodified' );
t.end(); t.end();
}); });
@ -50,11 +50,11 @@ module.exports.tests.setLocationBias = function(test, common) {
const defaultParameters = { const defaultParameters = {
'focus.point.lat': 12.2121212 'focus.point.lat': 12.2121212
}; };
const locationBias = setup(defaultParameters); const locationBias = sanitizer(defaultParameters);
const raw = {}; const raw = {};
const expected = {}; const expected = {};
locationBias(raw, undefined); locationBias.sanitize(raw, undefined);
t.deepEqual(raw, expected, 'should be unmodified' ); t.deepEqual(raw, expected, 'should be unmodified' );
t.end(); t.end();
}); });
@ -64,7 +64,7 @@ module.exports.tests.setLocationBias = function(test, common) {
'focus.point.lon': 12.2121212, 'focus.point.lon': 12.2121212,
'focus.point.lat': 12.2121212 'focus.point.lat': 12.2121212
}; };
const locationBias = setup(defaultParameters); const locationBias = sanitizer(defaultParameters);
const raw = { const raw = {
'focus.point.lon': 43.4343434 'focus.point.lon': 43.4343434
}; };
@ -72,7 +72,7 @@ module.exports.tests.setLocationBias = function(test, common) {
'focus.point.lon': 43.4343434 'focus.point.lon': 43.4343434
}; };
locationBias(raw, undefined); locationBias.sanitize(raw, undefined);
t.deepEqual(raw, expected, 'should be unmodified' ); t.deepEqual(raw, expected, 'should be unmodified' );
t.end(); t.end();
}); });
@ -82,7 +82,7 @@ module.exports.tests.setLocationBias = function(test, common) {
'focus.point.lon': 12.2121212, 'focus.point.lon': 12.2121212,
'focus.point.lat': 12.2121212 'focus.point.lat': 12.2121212
}; };
const locationBias = setup(defaultParameters); const locationBias = sanitizer(defaultParameters);
const raw = { const raw = {
'focus.point.lat': 34.3434343 'focus.point.lat': 34.3434343
}; };
@ -90,7 +90,7 @@ module.exports.tests.setLocationBias = function(test, common) {
'focus.point.lat': 34.3434343 'focus.point.lat': 34.3434343
}; };
locationBias(raw, undefined); locationBias.sanitize(raw, undefined);
t.deepEqual(raw, expected, 'should be unmodified' ); t.deepEqual(raw, expected, 'should be unmodified' );
t.end(); t.end();
}); });

14
test/unit/sanitizer/_single_scalar_parameters.js

@ -1,4 +1,4 @@
var sanitize = require('../../../sanitizer/_single_scalar_parameters'); var sanitizer = require('../../../sanitizer/_single_scalar_parameters')();
module.exports.tests = {}; module.exports.tests = {};
@ -10,8 +10,8 @@ module.exports.tests.single_scalar_parameters = function(test, common) {
arrayParameter2: ['value3'] arrayParameter2: ['value3']
}; };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEquals(errorsAndWarnings, { t.deepEquals(messages, {
errors: [ errors: [
'\'arrayParameter1\' parameter can only have one value', '\'arrayParameter1\' parameter can only have one value',
'\'arrayParameter2\' parameter can only have one value', '\'arrayParameter2\' parameter can only have one value',
@ -33,8 +33,8 @@ module.exports.tests.single_scalar_parameters = function(test, common) {
objectParameter2: { } objectParameter2: { }
}; };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEquals(errorsAndWarnings, { t.deepEquals(messages, {
errors: [ errors: [
'\'objectParameter1\' parameter must be a scalar', '\'objectParameter1\' parameter must be a scalar',
'\'objectParameter2\' parameter must be a scalar' '\'objectParameter2\' parameter must be a scalar'
@ -51,8 +51,8 @@ module.exports.tests.single_scalar_parameters = function(test, common) {
test('request with all scalar parameters should return empty errors', function(t) { test('request with all scalar parameters should return empty errors', function(t) {
var raw = { scalarParameter1: 'value1', scalarParameter2: 2, scalarParameter3: true }; var raw = { scalarParameter1: 'value1', scalarParameter2: 2, scalarParameter3: true };
var clean = {}; var clean = {};
var errorsAndWarnings = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEquals(errorsAndWarnings, { errors: [], warnings: [] }); t.deepEquals(messages, { errors: [], warnings: [] });
t.end(); t.end();
}); });

18
test/unit/sanitizer/_size.js

@ -1,4 +1,4 @@
var sanitize = require('../../../sanitizer/_size'); var sanitizer = require('../../../sanitizer/_size');
module.exports.tests = {}; module.exports.tests = {};
@ -6,7 +6,7 @@ module.exports.tests.sanitize_size = function(test, common) {
test('size=0', function(t) { test('size=0', function(t) {
var raw = { size: 0 }; var raw = { size: 0 };
var clean = {}; var clean = {};
var res = sanitize(/*defaults*/)(raw, clean); var res = sanitizer(/*defaults*/).sanitize(raw, clean);
t.equal(res.errors.length, 0, 'should return no errors'); t.equal(res.errors.length, 0, 'should return no errors');
t.equal(res.warnings.length, 1, 'should return warning'); t.equal(res.warnings.length, 1, 'should return warning');
t.equal(res.warnings[0], 'out-of-range integer \'size\', using MIN_SIZE', 'check warning text'); t.equal(res.warnings[0], 'out-of-range integer \'size\', using MIN_SIZE', 'check warning text');
@ -17,7 +17,7 @@ module.exports.tests.sanitize_size = function(test, common) {
test('size=10000', function(t) { test('size=10000', function(t) {
var raw = { size: 10000 }; var raw = { size: 10000 };
var clean = {}; var clean = {};
var res = sanitize(/*defaults*/)(raw, clean); var res = sanitizer(/*defaults*/).sanitize(raw, clean);
t.equal(res.errors.length, 0, 'should return no errors'); t.equal(res.errors.length, 0, 'should return no errors');
t.equal(res.warnings.length, 1, 'should return warning'); t.equal(res.warnings.length, 1, 'should return warning');
t.equal(res.warnings[0], 'out-of-range integer \'size\', using MAX_SIZE', 'check warning text'); t.equal(res.warnings[0], 'out-of-range integer \'size\', using MAX_SIZE', 'check warning text');
@ -28,20 +28,26 @@ module.exports.tests.sanitize_size = function(test, common) {
test('size not set', function(t) { test('size not set', function(t) {
var raw = {}; var raw = {};
var clean = {}; var clean = {};
var res = sanitize(/*defaults*/)(raw, clean); var res = sanitizer(/*defaults*/).sanitize(raw, clean);
t.equal(res.errors.length, 0, 'should return no errors'); t.equal(res.errors.length, 0, 'should return no errors');
t.equal(res.warnings.length, 0, 'should return no warning'); t.equal(res.warnings.length, 0, 'should return no warning');
t.equal(clean.size, 10, 'default to 10'); t.equal(clean.size, 10, 'default to 10');
t.end(); t.end();
}); });
test('return an array of valid parameters in object form for Joi schema validation', function(t) {
const expected = [{ name: 'size' }];
const validParameters = sanitizer(/*defaults*/).expected();
t.deepEquals(validParameters, expected);
t.end();
});
var valid_sizes = [5, '5', 5.5, '5.5']; var valid_sizes = [5, '5', 5.5, '5.5'];
valid_sizes.forEach(function (size) { valid_sizes.forEach(function (size) {
test('size=' + size, function (t) { test('size=' + size, function (t) {
var raw = {size: size}; var raw = {size: size};
var clean = {}; var clean = {};
var res = sanitize(/*defaults*/)(raw, clean); var res = sanitizer(/*defaults*/).sanitize(raw, clean);
t.equal(res.errors.length, 0, 'should return no errors'); t.equal(res.errors.length, 0, 'should return no errors');
t.equal(res.warnings.length, 0, 'should return warning'); t.equal(res.warnings.length, 0, 'should return warning');
t.equal(clean.size, 5, 'set to correct integer'); t.equal(clean.size, 5, 'set to correct integer');
@ -52,7 +58,7 @@ module.exports.tests.sanitize_size = function(test, common) {
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('SANTIZE _size ' + name, testFunction); return tape('SANITIZE _size ' + name, testFunction);
} }
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){

14
test/unit/sanitizer/_sources.js

@ -1,5 +1,5 @@
var type_mapping = require('../../../helper/type_mapping'); var type_mapping = require('../../../helper/type_mapping');
var sanitize = require( '../../../sanitizer/_targets' )('sources', type_mapping.source_mapping); var sanitizer = require( '../../../sanitizer/_targets' )('sources', type_mapping.source_mapping);
var success_messages = { error: false }; var success_messages = { error: false };
@ -12,7 +12,7 @@ module.exports.tests.no_sources = function(test, common) {
clean: { } clean: { }
}; };
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.equal(req.clean.sources, undefined, 'no sources should be defined'); t.equal(req.clean.sources, undefined, 'no sources should be defined');
t.deepEqual(messages.errors, [], 'no error returned'); t.deepEqual(messages.errors, [], 'no error returned');
@ -31,7 +31,7 @@ module.exports.tests.no_sources = function(test, common) {
var expected_error = 'sources parameter cannot be an empty string. ' + var expected_error = 'sources parameter cannot be an empty string. ' +
'Valid options: osm,oa,gn,wof,openstreetmap,openaddresses,geonames,whosonfirst'; 'Valid options: osm,oa,gn,wof,openstreetmap,openaddresses,geonames,whosonfirst';
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.equal(req.clean.sources, undefined, 'no sources should be defined'); t.equal(req.clean.sources, undefined, 'no sources should be defined');
t.deepEqual(messages.errors.length, 1, 'error returned'); t.deepEqual(messages.errors.length, 1, 'error returned');
@ -50,7 +50,7 @@ module.exports.tests.valid_sources = function(test, common) {
clean: { } clean: { }
}; };
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.deepEqual(req.clean.sources, ['geonames'], 'sources should contain geonames'); t.deepEqual(req.clean.sources, ['geonames'], 'sources should contain geonames');
t.deepEqual(messages.errors, [], 'no error returned'); t.deepEqual(messages.errors, [], 'no error returned');
@ -67,7 +67,7 @@ module.exports.tests.valid_sources = function(test, common) {
clean: { } clean: { }
}; };
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.deepEqual(req.clean.sources, ['openstreetmap'], 'abbreviation is expanded to full version'); t.deepEqual(req.clean.sources, ['openstreetmap'], 'abbreviation is expanded to full version');
t.deepEqual(messages.errors, [], 'no error returned'); t.deepEqual(messages.errors, [], 'no error returned');
@ -83,7 +83,7 @@ module.exports.tests.valid_sources = function(test, common) {
clean: { } clean: { }
}; };
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.deepEqual(req.clean.sources, ['openstreetmap', 'openaddresses'], t.deepEqual(req.clean.sources, ['openstreetmap', 'openaddresses'],
'clean.sources should contain openstreetmap and openadresses'); 'clean.sources should contain openstreetmap and openadresses');
@ -109,7 +109,7 @@ module.exports.tests.invalid_sources = function(test, common) {
warnings: [] warnings: []
}; };
var messages = sanitize(req.query, req.clean); var messages = sanitizer.sanitize(req.query, req.clean);
t.deepEqual(messages, expected_messages, 'error with message returned'); t.deepEqual(messages, expected_messages, 'error with message returned');
t.equal(req.clean.sources, undefined, 'clean.sources should remain empty'); t.equal(req.clean.sources, undefined, 'clean.sources should remain empty');

31
test/unit/sanitizer/_sources_and_layers.js

@ -1,4 +1,4 @@
var sanitize = require('../../../sanitizer/_sources_and_layers'); var sanitizer = require('../../../sanitizer/_sources_and_layers')();
var type_mapping = require('../../../helper/type_mapping'); var type_mapping = require('../../../helper/type_mapping');
@ -9,7 +9,7 @@ module.exports.tests.inactive = function(test, common) {
var raw = {}; var raw = {};
var clean = {}; var clean = {};
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -20,7 +20,7 @@ module.exports.tests.inactive = function(test, common) {
var raw = {}; var raw = {};
var clean = { layers: ['venue'] }; var clean = { layers: ['venue'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -31,7 +31,7 @@ module.exports.tests.inactive = function(test, common) {
var raw = {}; var raw = {};
var clean = { sources: ['openstreetmap'] }; var clean = { sources: ['openstreetmap'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -44,7 +44,7 @@ module.exports.tests.no_errors = function(test, common) {
var raw = {}; var raw = {};
var clean = { sources: ['openstreetmap'], layers: ['venue'] }; var clean = { sources: ['openstreetmap'], layers: ['venue'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -55,7 +55,7 @@ test('valid combination', function(t) {
var raw = {}; var raw = {};
var clean = { sources: ['geonames'], layers: ['borough'] }; var clean = { sources: ['geonames'], layers: ['borough'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -66,7 +66,7 @@ test('valid combination', function(t) {
var raw = {}; var raw = {};
var clean = { sources: ['geonames'], layers: ['macroregion'] }; var clean = { sources: ['geonames'], layers: ['macroregion'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -77,7 +77,7 @@ test('valid combination', function(t) {
var raw = {}; var raw = {};
var clean = { sources: ['whosonfirst'], layers: ['venue'] }; var clean = { sources: ['whosonfirst'], layers: ['venue'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -88,7 +88,7 @@ test('valid combination', function(t) {
var raw = {}; var raw = {};
var clean = { sources: ['openstreetmap', 'openaddresses'], layers: ['venue'] }; var clean = { sources: ['openstreetmap', 'openaddresses'], layers: ['venue'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
@ -99,12 +99,19 @@ test('valid combination', function(t) {
var raw = {}; var raw = {};
var clean = { sources: ['openaddresses'], layers: ['address', 'country'] }; var clean = { sources: ['openaddresses'], layers: ['address', 'country'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 0, 'should return no errors'); t.equal(messages.errors.length, 0, 'should return no errors');
t.equal(messages.warnings.length, 0, 'should return no warnings'); t.equal(messages.warnings.length, 0, 'should return no warnings');
t.end(); t.end();
}); });
test('return an array of valid parameters in object form for Joi schema validation', function (t) {
const expected = [{ 'name': 'sources' }, { 'name': 'layers' }];
const validParameters = sanitizer.expected();
t.deepEquals(validParameters, expected);
t.end();
});
}; };
module.exports.tests.invalid_combination = function(test, common) { module.exports.tests.invalid_combination = function(test, common) {
@ -112,7 +119,7 @@ module.exports.tests.invalid_combination = function(test, common) {
var raw = {}; var raw = {};
var clean = { sources: ['whosonfirst'], layers: ['address'] }; var clean = { sources: ['whosonfirst'], layers: ['address'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 1, 'should return an error'); t.equal(messages.errors.length, 1, 'should return an error');
t.equal(messages.errors[0], 'You have specified both the `sources` and `layers` ' + t.equal(messages.errors[0], 'You have specified both the `sources` and `layers` ' +
@ -125,7 +132,7 @@ module.exports.tests.invalid_combination = function(test, common) {
var raw = {}; var raw = {};
var clean = { sources: ['openstreetmap'], layers: ['country', 'locality'] }; var clean = { sources: ['openstreetmap'], layers: ['country', 'locality'] };
var messages = sanitize(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.equal(messages.errors.length, 2, 'should return an error'); t.equal(messages.errors.length, 2, 'should return an error');
t.equal(messages.errors[0], 'You have specified both the `sources` and `layers` ' + t.equal(messages.errors[0], 'You have specified both the `sources` and `layers` ' +

31
test/unit/sanitizer/_synthesize_analysis.js

@ -37,7 +37,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -76,7 +76,7 @@ module.exports.tests.text_parser = function(test, common) {
parsed_text: {} parsed_text: {}
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, ['at least one of the following fields is required: ' + t.deepEquals(messages.errors, ['at least one of the following fields is required: ' +
@ -99,7 +99,7 @@ module.exports.tests.text_parser = function(test, common) {
const expected_clean = { parsed_text: {} }; const expected_clean = { parsed_text: {} };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, ['at least one of the following fields is required: ' + t.deepEquals(messages.errors, ['at least one of the following fields is required: ' +
@ -128,7 +128,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -161,7 +161,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -194,7 +194,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -224,7 +224,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer().sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
@ -233,6 +233,23 @@ module.exports.tests.text_parser = function(test, common) {
}); });
test('return an array of valid parameters in object form for Joi schema validation', function (t) {
const sanitizer = require('../../../sanitizer/_synthesize_analysis');
const expected = [
{ 'name': 'venue' },
{ 'name': 'address' },
{ 'name': 'neighbourhood' },
{ 'name': 'borough' },
{ 'name': 'locality' },
{ 'name': 'county' },
{ 'name': 'region' },
{ 'name': 'postalcode' },
{ 'name': 'country' }];
const validParameters = sanitizer().expected();
t.deepEquals(validParameters, expected);
t.end();
});
}; };
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {

13
test/unit/sanitizer/_text.js

@ -1,4 +1,4 @@
const sanitizer = require('../../../sanitizer/_text'); const sanitizer = require('../../../sanitizer/_text')();
module.exports.tests = {}; module.exports.tests = {};
@ -15,7 +15,7 @@ module.exports.tests.text_parser = function(test, common) {
text: raw.text text: raw.text
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages, { warnings: [], errors: [] }, 'no errors/warnings'); t.deepEquals(messages, { warnings: [], errors: [] }, 'no errors/warnings');
@ -34,7 +34,7 @@ module.exports.tests.text_parser = function(test, common) {
const expected_clean = { const expected_clean = {
}; };
const messages = sanitizer(raw, clean); const messages = sanitizer.sanitize(raw, clean);
t.deepEquals(clean, expected_clean); t.deepEquals(clean, expected_clean);
t.deepEquals(messages.errors, ['invalid param \'text\': text length, must be >0'], 'no errors'); t.deepEquals(messages.errors, ['invalid param \'text\': text length, must be >0'], 'no errors');
@ -46,6 +46,13 @@ module.exports.tests.text_parser = function(test, common) {
}); });
test('return an array of expected parameters in object form for validation', (t) => {
const expected = [{ name: 'text' }];
const validParameters = sanitizer.expected();
t.deepEquals(validParameters, expected);
t.end();
});
}; };
module.exports.all = (tape, common) => { module.exports.all = (tape, common) => {

30
test/unit/sanitizer/_text_addressit.js

@ -1,4 +1,4 @@
var sanitizer = require('../../../sanitizer/_text_addressit'); var sanitizer = require('../../../sanitizer/_text_addressit')();
var type_mapping = require('../../../helper/type_mapping'); var type_mapping = require('../../../helper/type_mapping');
module.exports.tests = {}; module.exports.tests = {};
@ -11,7 +11,7 @@ module.exports.tests.text_parser = function(test, common) {
var clean = { var clean = {
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEquals(messages.errors, [], 'no errors'); t.deepEquals(messages.errors, [], 'no errors');
t.deepEquals(messages.warnings, [], 'no warnings'); t.deepEquals(messages.warnings, [], 'no warnings');
@ -42,7 +42,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -67,7 +67,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -98,7 +98,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -122,7 +122,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -144,7 +144,7 @@ module.exports.tests.text_parser = function(test, common) {
text: 'yugolsavia' text: 'yugolsavia'
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -164,7 +164,7 @@ module.exports.tests.text_parser = function(test, common) {
text: 'small town' text: 'small town'
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -184,7 +184,7 @@ module.exports.tests.text_parser = function(test, common) {
text: '123 main' text: '123 main'
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -204,7 +204,7 @@ module.exports.tests.text_parser = function(test, common) {
text: 'main 123' text: 'main 123'
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -228,7 +228,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -253,7 +253,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -279,7 +279,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -305,7 +305,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);
@ -331,7 +331,7 @@ module.exports.tests.text_parser = function(test, common) {
} }
}; };
var messages = sanitizer(raw, clean); var messages = sanitizer.sanitize(raw, clean);
t.deepEqual(messages, { errors: [], warnings: [] } ); t.deepEqual(messages, { errors: [], warnings: [] } );
t.deepEqual(clean, expected_clean); t.deepEqual(clean, expected_clean);

38
test/unit/sanitizer/_tokenizer.js

@ -1,4 +1,4 @@
var sanitizer = require('../../../sanitizer/_tokenizer'); var sanitizer = require('../../../sanitizer/_tokenizer')();
module.exports.tests = {}; module.exports.tests = {};
@ -6,7 +6,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('clean.text not set', function(t) { test('clean.text not set', function(t) {
var clean = {}; // clean.text not set var clean = {}; // clean.text not set
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// no tokens produced // no tokens produced
t.deepEquals(clean.tokens, [], 'no tokens'); t.deepEquals(clean.tokens, [], 'no tokens');
@ -22,7 +22,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('clean.text not a string', function(t) { test('clean.text not a string', function(t) {
var clean = { text: {} }; // clean.text not a string var clean = { text: {} }; // clean.text not a string
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// no tokens produced // no tokens produced
t.deepEquals(clean.tokens, [], 'no tokens'); t.deepEquals(clean.tokens, [], 'no tokens');
@ -38,7 +38,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('empty string', function(t) { test('empty string', function(t) {
var clean = { text: '' }; var clean = { text: '' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// no tokens produced // no tokens produced
t.deepEquals(clean.tokens, [], 'no tokens'); t.deepEquals(clean.tokens, [], 'no tokens');
@ -54,7 +54,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('clean.parsed_text set but clean.parsed_text.name invalid', function(t) { test('clean.parsed_text set but clean.parsed_text.name invalid', function(t) {
var clean = { parsed_text: { text: {} } }; var clean = { parsed_text: { text: {} } };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// no tokens produced // no tokens produced
t.deepEquals(clean.tokens, [], 'no tokens'); t.deepEquals(clean.tokens, [], 'no tokens');
@ -70,7 +70,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('favor clean.parsed_text.name over clean.text', function(t) { test('favor clean.parsed_text.name over clean.text', function(t) {
var clean = { parsed_text: { name: 'foo' }, text: 'bar' }; var clean = { parsed_text: { name: 'foo' }, text: 'bar' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// favor clean.parsed_text.name over clean.text // favor clean.parsed_text.name over clean.text
t.deepEquals(clean.tokens, [ 'foo' ], 'use clean.parsed_text.name'); t.deepEquals(clean.tokens, [ 'foo' ], 'use clean.parsed_text.name');
@ -86,7 +86,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('favor clean.parsed_text street data over clean.text', function(t) { test('favor clean.parsed_text street data over clean.text', function(t) {
var clean = { parsed_text: { number: '190', street: 'foo st' }, text: 'bar' }; var clean = { parsed_text: { number: '190', street: 'foo st' }, text: 'bar' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// favor clean.parsed_text.name over clean.text // favor clean.parsed_text.name over clean.text
t.deepEquals(clean.tokens, [ '190', 'foo', 'st' ], 'use street name + number'); t.deepEquals(clean.tokens, [ '190', 'foo', 'st' ], 'use street name + number');
@ -102,7 +102,7 @@ module.exports.tests.sanity_checks = function(test, common) {
test('favor clean.parsed_text.name over clean.parsed_text street data', function(t) { test('favor clean.parsed_text.name over clean.parsed_text street data', function(t) {
var clean = { parsed_text: { number: '190', street: 'foo st', name: 'foo' }, text: 'bar' }; var clean = { parsed_text: { number: '190', street: 'foo st', name: 'foo' }, text: 'bar' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// favor clean.parsed_text.name over all other variables // favor clean.parsed_text.name over all other variables
t.deepEquals(clean.tokens, [ 'foo' ], 'use clean.parsed_text.name'); t.deepEquals(clean.tokens, [ 'foo' ], 'use clean.parsed_text.name');
@ -121,7 +121,7 @@ module.exports.tests.space_delimiter = function(test, common) {
test('space delimiter - simple', function(t) { test('space delimiter - simple', function(t) {
var clean = { text: '30 west 26th street new york' }; var clean = { text: '30 west 26th street new york' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -156,7 +156,7 @@ module.exports.tests.space_delimiter = function(test, common) {
test('space delimiter - multiple spaces / other whitespace', function(t) { test('space delimiter - multiple spaces / other whitespace', function(t) {
var clean = { text: ' 30 west \t26th \nstreet new york ' }; var clean = { text: ' 30 west \t26th \nstreet new york ' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -194,7 +194,7 @@ module.exports.tests.comma_delimiter = function(test, common) {
test('comma delimiter - simple', function(t) { test('comma delimiter - simple', function(t) {
var clean = { text: '30 west 26th street, new york' }; var clean = { text: '30 west 26th street, new york' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -229,7 +229,7 @@ module.exports.tests.comma_delimiter = function(test, common) {
test('comma delimiter - multiple commas', function(t) { test('comma delimiter - multiple commas', function(t) {
var clean = { text: ',30 west 26th street,,, new york,' }; var clean = { text: ',30 west 26th street,,, new york,' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -267,7 +267,7 @@ module.exports.tests.forward_slash_delimiter = function(test, common) {
test('forward slash delimiter - simple', function(t) { test('forward slash delimiter - simple', function(t) {
var clean = { text: 'Bedell Street/133rd Avenue' }; var clean = { text: 'Bedell Street/133rd Avenue' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -298,7 +298,7 @@ module.exports.tests.forward_slash_delimiter = function(test, common) {
test('forward slash - multiple slashes', function(t) { test('forward slash - multiple slashes', function(t) {
var clean = { text: '/Bedell Street//133rd Avenue/' }; var clean = { text: '/Bedell Street//133rd Avenue/' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -332,7 +332,7 @@ module.exports.tests.final_token_single_gram = function(test, common) {
test('final token single gram - numeric', function(t) { test('final token single gram - numeric', function(t) {
var clean = { text: 'grolmanstrasse 1' }; var clean = { text: 'grolmanstrasse 1' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -359,7 +359,7 @@ module.exports.tests.final_token_single_gram = function(test, common) {
test('final token single gram - non-numeric', function(t) { test('final token single gram - non-numeric', function(t) {
var clean = { text: 'grolmanstrasse a' }; var clean = { text: 'grolmanstrasse a' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -389,7 +389,7 @@ module.exports.tests.back_slash_delimiter = function(test, common) {
test('back slash delimiter - simple', function(t) { test('back slash delimiter - simple', function(t) {
var clean = { text: 'Bedell Street\\133rd Avenue' }; var clean = { text: 'Bedell Street\\133rd Avenue' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -408,7 +408,7 @@ module.exports.tests.back_slash_delimiter = function(test, common) {
test('back slash - multiple slashes', function(t) { test('back slash - multiple slashes', function(t) {
var clean = { text: '\\Bedell Street\\\\133rd Avenue\\' }; var clean = { text: '\\Bedell Street\\\\133rd Avenue\\' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [
@ -430,7 +430,7 @@ module.exports.tests.mixed_delimiter = function(test, common) {
test('mixed delimiters', function(t) { test('mixed delimiters', function(t) {
var clean = { text: ',/Bedell Street\\, \n\t ,\\//133rd Avenue, /\n/' }; var clean = { text: ',/Bedell Street\\, \n\t ,\\//133rd Avenue, /\n/' };
var messages = sanitizer({}, clean); var messages = sanitizer.sanitize({}, clean);
// tokens produced // tokens produced
t.deepEquals(clean.tokens, [ t.deepEquals(clean.tokens, [

Loading…
Cancel
Save