var parser = require('../../../helper/text_parser'); var type_mapping = require('../../../helper/type_mapping'); var layers_map = type_mapping.layer_mapping; 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 is a string'); t.end(); }); test('valid address with leading 0s in zipcode', function(t) { var query_string = '339 W Main St, Cheshire, 06410'; var address = parser.get_parsed_address(query_string); console.log(address); t.equal(typeof address, 'object', 'valid object for the address'); t.equal(address.street, 'W Main St', 'parsed street'); t.deepEqual(address.regions, ['Cheshire'], 'parsed city'); t.equal(address.postalcode, '06410', 'parsed zip'); t.end(); }); test('valid address without spaces after commas', function(t) { var query_string = '339 W Main St,Lancaster,PA'; var address = parser.get_parsed_address(query_string); t.equal(typeof address, 'object', 'valid object for the address'); t.equal(address.number, '339', 'parsed house number'); t.equal(address.street, 'W Main St', 'parsed street'); t.deepEqual(address.regions, ['Lancaster'], 'parsed city'); t.deepEqual(address.state, 'PA', 'parsed state'); 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); } };