|
|
|
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.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) {
|
|
|
|
function test(name, testFunction) {
|
|
|
|
return tape('text_parser ' + name, testFunction);
|
|
|
|
}
|
|
|
|
|
|
|
|
for( var testCase in module.exports.tests ){
|
|
|
|
module.exports.tests[testCase](test, common);
|
|
|
|
}
|
|
|
|
};
|