You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

168 lines
5.0 KiB

var VariableStore = require('pelias-query').Vars;
var text_parser = require('../../../query/text_parser');
module.exports.tests = {};
module.exports.tests.interface = function(test, common) {
test('valid interface', function(t) {
t.equal(typeof text_parser, 'function', 'valid function');
t.end();
});
};
module.exports.tests.query = function(test, common) {
test('parsed_text without properties should leave vs properties unset', function(t) {
var parsed_text = {};
var vs = new VariableStore();
text_parser(parsed_text, vs);
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();
});
test('parsed_text without properties should leave vs properties unset', function(t) {
var parsed_text = {
query: 'query value',
category: 'category value',
number: 'number value',
street: 'street value',
address: 'address value',
neighbourhood: 'neighbourhood value',
borough: 'borough value',
postalcode: 'postalcode value',
city: 'city value',
county: 'county value',
state: 'state value',
country: 'country value'
};
var vs = new VariableStore();
text_parser(parsed_text, vs);
t.equals(vs.var('input:query').toString(), 'query value');
t.equals(vs.var('input:category').toString(), 'category value');
t.equals(vs.var('input:housenumber').toString(), 'number value');
t.equals(vs.var('input:street').toString(), 'street value');
t.equals(vs.var('input:address').toString(), 'address value');
t.equals(vs.var('input:neighbourhood').toString(), 'neighbourhood value');
t.equals(vs.var('input:borough').toString(), 'borough value');
t.equals(vs.var('input:postcode').toString(), 'postalcode value');
t.equals(vs.var('input:locality').toString(), 'city value');
t.equals(vs.var('input:county').toString(), 'county value');
t.equals(vs.var('input:region').toString(), 'state value');
t.equals(vs.var('input:country').toString(), 'country value');
t.end();
});
};
module.exports.tests.housenumber_special_cases = function(test, common) {
test('numeric query with street but no number should reassign query to housenumber', function(t) {
var parsed_text = {
query: '17',
// no house number set
street: 'street value'
};
var vs = new VariableStore();
text_parser(parsed_text, vs);
t.false(vs.isset('input:query'));
t.equals(vs.var('input:housenumber').toString(), '17');
t.equals(vs.var('input:street').toString(), 'street value');
t.end();
});
test('numeric query with street but without number should not change anything', function(t) {
var parsed_text = {
query: '17',
number: 'housenumber value',
street: 'street value'
// no number or street
};
var vs = new VariableStore();
text_parser(parsed_text, vs);
t.equals(vs.var('input:query').toString(), '17');
t.equals(vs.var('input:housenumber').toString(), 'housenumber value');
t.equals(vs.var('input:street').toString(), 'street value');
t.end();
});
test('numeric query with number but without street should not change anything', function(t) {
var parsed_text = {
query: '17',
number: 'number value'
// no number or street
};
var vs = new VariableStore();
text_parser(parsed_text, vs);
t.equals(vs.var('input:query').toString(), '17');
t.equals(vs.var('input:housenumber').toString(), 'number value');
t.false(vs.isset('input:street'));
t.end();
});
test('numeric query without street or number should not change anything', function(t) {
var parsed_text = {
query: '17'
// no number or street
};
var vs = new VariableStore();
text_parser(parsed_text, vs);
t.equals(vs.var('input:query').toString(), '17');
t.false(vs.isset('input:housenumber'));
t.false(vs.isset('input:street'));
t.end();
});
test('non-numeric query with street but no number should not change anything', function(t) {
var parsed_text = {
query: '13 this is 15 not a number 17',
street: 'street value'
};
var vs = new VariableStore();
text_parser(parsed_text, vs);
t.equals(vs.var('input:query').toString(), '13 this is 15 not a number 17');
t.false(vs.isset('input:housenumber'));
t.equals(vs.var('input:street').toString(), 'street value');
t.end();
});
};
module.exports.all = function (tape, common) {
function test(name, testFunction) {
return tape('text_parser ' + name, testFunction);
}
for( var testCase in module.exports.tests ){
module.exports.tests[testCase](test, common);
}
};