Browse Source

fix: empty values in parsed text caused exceptions

pull/772/head
Diana Shkolnikov 8 years ago
parent
commit
4f999adce1
  1. 25
      query/text_parser.js
  2. 42
      test/unit/query/text_parser.js

25
query/text_parser.js

@ -1,67 +1,68 @@
var logger = require('pelias-logger').get('api'); var logger = require('pelias-logger').get('api');
var _ = require('lodash');
// all the address parsing logic // all the address parsing logic
function addParsedVariablesToQueryVariables( parsed_text, vs ){ function addParsedVariablesToQueryVariables( parsed_text, vs ){
// ==== add parsed matches [address components] ==== // ==== add parsed matches [address components] ====
// query - Mexitaly, Sunoco, Lowes // query - Mexitaly, Sunoco, Lowes
if (parsed_text.hasOwnProperty('query')) { if ( ! _.isEmpty(parsed_text.query) ) {
vs.var('input:query', parsed_text.query); vs.var('input:query', parsed_text.query);
} }
// categories - restaurants, hotels, bars // categories - restaurants, hotels, bars
if (parsed_text.hasOwnProperty('category')) { if ( ! _.isEmpty(parsed_text.category) ) {
vs.var('input:category', parsed_text.category); vs.var('input:category', parsed_text.category);
} }
if (parsed_text.hasOwnProperty('address')) { if ( ! _.isEmpty(parsed_text.address) ) {
vs.var( 'input:address', parsed_text.address ); vs.var( 'input:address', parsed_text.address );
} }
// house number // house number
if( parsed_text.hasOwnProperty('number') ){ if( ! _.isEmpty(parsed_text.number) ){
vs.var( 'input:housenumber', parsed_text.number ); vs.var( 'input:housenumber', parsed_text.number );
} }
// street name // street name
if( parsed_text.hasOwnProperty('street') ){ if( ! _.isEmpty(parsed_text.street) ){
vs.var( 'input:street', parsed_text.street ); vs.var( 'input:street', parsed_text.street );
} }
// neighbourhood // neighbourhood
if (parsed_text.hasOwnProperty('neighbourhood')) { if ( ! _.isEmpty(parsed_text.neighbourhood) ) {
vs.var( 'input:neighbourhood', parsed_text.neighbourhood); vs.var( 'input:neighbourhood', parsed_text.neighbourhood);
} }
// borough // borough
if (parsed_text.hasOwnProperty('borough')) { if ( ! _.isEmpty(parsed_text.borough) ) {
vs.var( 'input:borough', parsed_text.borough); vs.var( 'input:borough', parsed_text.borough);
} }
// postal code // postal code
if( parsed_text.hasOwnProperty('postalcode') ){ if( ! _.isEmpty(parsed_text.postalcode) ){
vs.var( 'input:postcode', parsed_text.postalcode ); vs.var( 'input:postcode', parsed_text.postalcode );
} }
// ==== add parsed matches [admin components] ==== // ==== add parsed matches [admin components] ====
// city // city
if( parsed_text.hasOwnProperty('city') ){ if( ! _.isEmpty(parsed_text.city) ){
vs.var( 'input:locality', parsed_text.city ); vs.var( 'input:locality', parsed_text.city );
} }
// county // county
if( parsed_text.hasOwnProperty('county') ){ if( ! _.isEmpty(parsed_text.county) ){
vs.var( 'input:county', parsed_text.county ); vs.var( 'input:county', parsed_text.county );
} }
// state // state
if( parsed_text.hasOwnProperty('state') ){ if( ! _.isEmpty(parsed_text.state) ){
vs.var( 'input:region', parsed_text.state ); vs.var( 'input:region', parsed_text.state );
} }
// country // country
if( parsed_text.hasOwnProperty('country') ){ if( ! _.isEmpty(parsed_text.country) ){
vs.var( 'input:country', parsed_text.country ); vs.var( 'input:country', parsed_text.country );
} }

42
test/unit/query/text_parser.js

@ -157,6 +157,48 @@ module.exports.tests.housenumber_special_cases = function(test, common) {
}; };
module.exports.tests.empty_values = function(test, common) {
test('empty string values not set', function (t) {
var parsed_text = {
query: '',
category: '',
number: '',
street: '',
address: '',
neighbourhood: '',
borough: '',
postalcode: '',
city: '',
county: '',
state: '',
country: ''
};
var vs = new VariableStore();
function testIt() {
text_parser(parsed_text, vs);
}
t.doesNotThrow(testIt, 'exception should not be thrown');
t.false(vs.isset('input:query'));
t.false(vs.isset('input:category'));
t.false(vs.isset('input:housenumber'));
t.false(vs.isset('input:street'));
t.false(vs.isset('input:address'));
t.false(vs.isset('input:neighbourhood'));
t.false(vs.isset('input:borough'));
t.false(vs.isset('input:postcode'));
t.false(vs.isset('input:locality'));
t.false(vs.isset('input:county'));
t.false(vs.isset('input:region'));
t.false(vs.isset('input:country'));
t.end();
});
};
module.exports.all = function (tape, common) { module.exports.all = function (tape, common) {
function test(name, testFunction) { function test(name, testFunction) {
return tape('text_parser ' + name, testFunction); return tape('text_parser ' + name, testFunction);

Loading…
Cancel
Save