mirror of https://github.com/pelias/api.git
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.
118 lines
4.2 KiB
118 lines
4.2 KiB
var parser = require('../../../helper/query_parser'); |
|
|
|
var type_mapping = require('../../../helper/type_mapping'); |
|
var layers_map = type_mapping.layer_with_aliases_to_type; |
|
|
|
module.exports.tests = {}; |
|
|
|
module.exports.tests.interface = function(test, common) { |
|
test('interface', function(t) { |
|
t.equal(typeof parser.get_parsed_address, 'function', 'valid function'); |
|
t.equal(typeof parser.get_layers, 'function', 'valid function'); |
|
t.end(); |
|
}); |
|
}; |
|
|
|
module.exports.tests.split_on_comma = function(test, common) { |
|
var queries = [ |
|
{ name: 'soho', admin_parts: 'new york' }, |
|
{ name: 'chelsea', admin_parts: 'london' }, |
|
{ name: '123 main', admin_parts: 'new york' } |
|
]; |
|
|
|
queries.forEach(function (query) { |
|
test('naive parsing ' + query, function(t) { |
|
var address = parser.get_parsed_address(query.name + ', ' + query.admin_parts); |
|
|
|
t.equal(typeof address, 'object', 'valid object'); |
|
t.equal(address.name, query.name, 'name set correctly to ' + address.name); |
|
t.equal(address.admin_parts, query.admin_parts, 'admin_parts set correctly to ' + address.admin_parts); |
|
t.end(); |
|
}); |
|
}); |
|
}; |
|
|
|
module.exports.tests.parse_three_chars_or_less = function(test, common) { |
|
var chars_queries = ['a', 'bb', 'ccc']; |
|
var num_queries = ['1', '12', '123']; |
|
var alphanum_q = ['a1', '1a2', '12c']; |
|
|
|
var queries = chars_queries.concat(num_queries).concat(alphanum_q); |
|
queries.forEach(function(query) { |
|
test('query length < 3 (' + query + ')', function(t) { |
|
var address = parser.get_parsed_address(query); |
|
var target_layer = layers_map.coarse; |
|
var layers = parser.get_layers(query); |
|
|
|
t.equal(typeof address, 'object', 'valid object'); |
|
t.deepEqual(layers, target_layer, 'admin_parts set correctly to ' + target_layer.join(', ')); |
|
t.end(); |
|
}); |
|
}); |
|
}; |
|
|
|
module.exports.tests.parse_one_token = function(test, common) { |
|
test('query with one token', function (t) { |
|
var address = parser.get_parsed_address('yugolsavia'); |
|
t.equal(address, null, 'nothing address specific detected'); |
|
t.end(); |
|
}); |
|
test('query with two tokens, no numbers', function (t) { |
|
var address = parser.get_parsed_address('small town'); |
|
t.equal(address, null, 'nothing address specific detected'); |
|
t.end(); |
|
}); |
|
test('query with two tokens, number first', function (t) { |
|
var address = parser.get_parsed_address('123 main'); |
|
t.equal(address, null, 'nothing address specific detected'); |
|
t.end(); |
|
}); |
|
test('query with two tokens, number second', function (t) { |
|
var address = parser.get_parsed_address('main 123'); |
|
t.equal(address, null, 'nothing address specific detected'); |
|
t.end(); |
|
}); |
|
test('query with many tokens', function(t) { |
|
var address = parser.get_parsed_address('main particle new york'); |
|
t.equal(address, null, 'nothing address specific detected'); |
|
t.end(); |
|
}); |
|
}; |
|
|
|
module.exports.tests.parse_address = function(test, common) { |
|
test('valid address, house number', function(t) { |
|
var query_string = '123 main st new york ny'; |
|
var address = parser.get_parsed_address(query_string); |
|
|
|
t.equal(typeof address, 'object', 'valid object for the address'); |
|
t.equal(address.number, 123, 'parsed house number'); |
|
t.equal(address.street, 'main st', 'parsed street'); |
|
t.deepEqual(address.regions, ['new york'], 'parsed city'); |
|
t.equal(address.state , 'NY', 'parsed state'); |
|
t.end(); |
|
}); |
|
test('valid address, zipcode', function(t) { |
|
var query_string = '123 main st new york ny 10010'; |
|
var address = parser.get_parsed_address(query_string); |
|
|
|
t.equal(typeof address, 'object', 'valid object for the address'); |
|
t.equal(address.number, 123, 'parsed house number'); |
|
t.equal(address.street, 'main st', 'parsed street'); |
|
t.deepEqual(address.regions, ['new york'], 'parsed city'); |
|
t.equal(address.state , 'NY', 'parsed state'); |
|
t.equal(address.postalcode, 10010, 'parsed zip'); |
|
t.end(); |
|
}); |
|
}; |
|
|
|
|
|
module.exports.all = function (tape, common) { |
|
|
|
function test(name, testFunction) { |
|
return tape('QUERY PARSING: ' + name, testFunction); |
|
} |
|
|
|
for( var testCase in module.exports.tests ){ |
|
module.exports.tests[testCase](test, common); |
|
} |
|
};
|
|
|