|
|
|
|
|
|
|
var geojsonify = require('../../../helper/geojsonify');
|
|
|
|
|
|
|
|
module.exports.tests = {};
|
|
|
|
|
|
|
|
module.exports.tests.interface = function(test, common) {
|
|
|
|
test('valid interface .search()', function(t) {
|
|
|
|
t.equal(typeof geojsonify.search, 'function', 'search is a function');
|
|
|
|
t.equal(geojsonify.search.length, 2, 'accepts x arguments');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
// ref: https://github.com/pelias/pelias/issues/84
|
|
|
|
module.exports.tests.earth = function(test, common) {
|
|
|
|
|
|
|
|
var earth = [{
|
|
|
|
'_type': 'geoname',
|
|
|
|
'_id': '6295630',
|
|
|
|
'name': {
|
|
|
|
'default': 'Earth'
|
|
|
|
},
|
|
|
|
'center_point': {
|
|
|
|
'lon': 0,
|
|
|
|
'lat': 0
|
|
|
|
}
|
|
|
|
}];
|
|
|
|
|
|
|
|
test('earth', function(t) {
|
|
|
|
t.doesNotThrow(function(){
|
|
|
|
geojsonify.search( earth, { details: true } );
|
|
|
|
});
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.search = function(test, common) {
|
|
|
|
|
|
|
|
var input = [
|
|
|
|
{
|
|
|
|
'_id': 'id1',
|
|
|
|
'_type': 'type1',
|
|
|
|
'center_point': {
|
|
|
|
'lat': 51.5337144,
|
|
|
|
'lon': -0.1069716
|
|
|
|
},
|
|
|
|
'name': {
|
|
|
|
'default': '\'Round Midnight Jazz and Blues Bar'
|
|
|
|
},
|
|
|
|
'type': 'node',
|
|
|
|
'address': {
|
|
|
|
'number': '13',
|
|
|
|
'street': 'Liverpool Road',
|
|
|
|
'zip': 'N1 0RW'
|
|
|
|
},
|
|
|
|
'alpha3': 'GBR',
|
|
|
|
'admin0': 'United Kingdom',
|
|
|
|
'admin1': 'Islington',
|
|
|
|
'admin1_abbr': 'ISL',
|
|
|
|
'admin2': 'Angel',
|
|
|
|
'local_admin': 'test1',
|
|
|
|
'locality': 'test2',
|
|
|
|
'neighborhood': 'test3',
|
|
|
|
'suggest': {
|
|
|
|
'input': [
|
|
|
|
'\'round midnight jazz and blues bar'
|
|
|
|
],
|
|
|
|
'output': 'osmnode:2208150035'
|
|
|
|
},
|
|
|
|
'category': [
|
|
|
|
'food',
|
|
|
|
'nightlife'
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'_id': 'id2',
|
|
|
|
'_type': 'type2',
|
|
|
|
'type': 'way',
|
|
|
|
'name': {
|
|
|
|
'default': 'Blues Cafe'
|
|
|
|
},
|
|
|
|
'center_point': {
|
|
|
|
'lat': '51.517806',
|
|
|
|
'lon': '-0.101795'
|
|
|
|
},
|
|
|
|
'alpha3': 'GBR',
|
|
|
|
'admin0': 'United Kingdom',
|
|
|
|
'admin1': 'City And County Of The City Of London',
|
|
|
|
'admin1_abbr': 'COL',
|
|
|
|
'admin2': 'Smithfield',
|
|
|
|
'local_admin': 'test1',
|
|
|
|
'locality': 'test2',
|
|
|
|
'neighborhood': 'test3',
|
|
|
|
'suggest': {
|
|
|
|
'input': [
|
|
|
|
'blues cafe'
|
|
|
|
],
|
|
|
|
'output': 'osmway:147495160'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'_id': '34633854',
|
|
|
|
'_type': 'osmway',
|
|
|
|
'type': 'osmway',
|
|
|
|
'name': {
|
|
|
|
'default': 'Empire State Building'
|
|
|
|
},
|
|
|
|
'center_point': {
|
|
|
|
'lat': '40.748432',
|
|
|
|
'lon': '-73.985656'
|
|
|
|
},
|
|
|
|
'alpha3': 'USA',
|
|
|
|
'admin0': 'United States',
|
|
|
|
'admin1': 'New York',
|
|
|
|
'admin1_abbr': 'NY',
|
|
|
|
'admin2': 'New York',
|
|
|
|
'local_admin': 'Manhattan',
|
|
|
|
'locality': 'New York',
|
|
|
|
'neighborhood': 'Koreatown',
|
|
|
|
'suggest': {
|
|
|
|
'input': [
|
|
|
|
'empire state building'
|
|
|
|
],
|
|
|
|
'output': 'osmway:34633854'
|
|
|
|
},
|
|
|
|
'category': [
|
|
|
|
'tourism',
|
|
|
|
'transport'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
var expected = {
|
|
|
|
'type': 'FeatureCollection',
|
|
|
|
'bbox': [ -73.985656, 40.748432, -0.101795, 51.5337144 ],
|
|
|
|
'features': [
|
|
|
|
{
|
|
|
|
'type': 'Feature',
|
|
|
|
'geometry': {
|
|
|
|
'type': 'Point',
|
|
|
|
'coordinates': [
|
|
|
|
-0.1069716,
|
|
|
|
51.5337144
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'properties': {
|
|
|
|
'id': 'id1',
|
|
|
|
'layer': 'type1',
|
|
|
|
'text': '\'Round Midnight Jazz and Blues Bar, test3, Angel',
|
|
|
|
'name': '\'Round Midnight Jazz and Blues Bar',
|
|
|
|
'alpha3': 'GBR',
|
|
|
|
'admin0': 'United Kingdom',
|
|
|
|
'admin1': 'Islington',
|
|
|
|
'admin1_abbr': 'ISL',
|
|
|
|
'admin2': 'Angel',
|
|
|
|
'local_admin': 'test1',
|
|
|
|
'locality': 'test2',
|
|
|
|
'neighborhood': 'test3',
|
|
|
|
'category': [ 'food', 'nightlife' ],
|
|
|
|
'address': {
|
|
|
|
'number': '13',
|
|
|
|
'street': 'Liverpool Road',
|
|
|
|
'zip': 'N1 0RW'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'type': 'Feature',
|
|
|
|
'geometry': {
|
|
|
|
'type': 'Point',
|
|
|
|
'coordinates': [
|
|
|
|
-0.101795,
|
|
|
|
51.517806
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'properties': {
|
|
|
|
'id': 'id2',
|
|
|
|
'layer': 'type2',
|
|
|
|
'text': 'Blues Cafe, test3, Smithfield',
|
|
|
|
'name': 'Blues Cafe',
|
|
|
|
'alpha3': 'GBR',
|
|
|
|
'admin0': 'United Kingdom',
|
|
|
|
'admin1': 'City And County Of The City Of London',
|
|
|
|
'admin1_abbr': 'COL',
|
|
|
|
'admin2': 'Smithfield',
|
|
|
|
'local_admin': 'test1',
|
|
|
|
'locality': 'test2',
|
|
|
|
'neighborhood': 'test3'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'type': 'Feature',
|
|
|
|
'geometry': {
|
|
|
|
'type': 'Point',
|
|
|
|
'coordinates': [
|
|
|
|
-73.985656,
|
|
|
|
40.748432
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'properties': {
|
|
|
|
'id': '34633854',
|
|
|
|
'layer': 'osmway',
|
|
|
|
'text': 'Empire State Building, Manhattan, NY',
|
|
|
|
'name': 'Empire State Building',
|
|
|
|
'alpha3': 'USA',
|
|
|
|
'admin0': 'United States',
|
|
|
|
'admin1': 'New York',
|
|
|
|
'admin1_abbr': 'NY',
|
|
|
|
'admin2': 'New York',
|
|
|
|
'local_admin': 'Manhattan',
|
|
|
|
'locality': 'New York',
|
|
|
|
'neighborhood': 'Koreatown',
|
|
|
|
'category': [ 'tourism', 'transport' ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
var truthy_params = [true, 1];
|
|
|
|
|
|
|
|
test('geojsonify.search(doc, true) with details', function(t) {
|
|
|
|
var json = geojsonify.search( input, { details: true } );
|
|
|
|
t.deepEqual(json, expected, 'all docs (with details) mapped');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
truthy_params.forEach(function(details) {
|
|
|
|
test('geojsonify.search(doc, '+ details +') with details', function(t) {
|
|
|
|
var json = geojsonify.search( input, { details: details } );
|
|
|
|
t.deepEqual(json, expected, 'all docs (with details) mapped');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
var no_details_expected = {
|
|
|
|
'type': 'FeatureCollection',
|
|
|
|
'bbox': [ -73.985656, 40.748432, -0.101795, 51.5337144 ],
|
|
|
|
'features': [
|
|
|
|
{
|
|
|
|
'type': 'Feature',
|
|
|
|
'geometry': {
|
|
|
|
'type': 'Point',
|
|
|
|
'coordinates': [
|
|
|
|
-0.1069716,
|
|
|
|
51.5337144
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'properties': {
|
|
|
|
'id': 'id1',
|
|
|
|
'layer': 'type1',
|
|
|
|
'text': '\'Round Midnight Jazz and Blues Bar, test3, Angel'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'type': 'Feature',
|
|
|
|
'geometry': {
|
|
|
|
'type': 'Point',
|
|
|
|
'coordinates': [
|
|
|
|
-0.101795,
|
|
|
|
51.517806
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'properties': {
|
|
|
|
'id': 'id2',
|
|
|
|
'layer': 'type2',
|
|
|
|
'text': 'Blues Cafe, test3, Smithfield'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'type': 'Feature',
|
|
|
|
'geometry': {
|
|
|
|
'type': 'Point',
|
|
|
|
'coordinates': [
|
|
|
|
-73.985656,
|
|
|
|
40.748432
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'properties': {
|
|
|
|
'id': '34633854',
|
|
|
|
'layer': 'osmway',
|
|
|
|
'text': 'Empire State Building, Manhattan, NY'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
test('geojsonify.search(doc) with no details (default)', function(t) {
|
|
|
|
var json = geojsonify.search( input );
|
|
|
|
t.deepEqual(json, no_details_expected, 'all docs (with no details) mapped');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
var falsy_params = [false, undefined, null, 0, -1, 123, 'abc'];
|
|
|
|
|
|
|
|
falsy_params.forEach(function(details) {
|
|
|
|
test('geojsonify.search(doc, '+ details +') with no details', function(t) {
|
|
|
|
var json = geojsonify.search( input, { details: details } );
|
|
|
|
t.deepEqual(json, no_details_expected, 'all docs (with no details) mapped');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.all = function (tape, common) {
|
|
|
|
|
|
|
|
function test(name, testFunction) {
|
|
|
|
return tape('geojsonify: ' + name, testFunction);
|
|
|
|
}
|
|
|
|
|
|
|
|
for( var testCase in module.exports.tests ){
|
|
|
|
module.exports.tests[testCase](test, common);
|
|
|
|
}
|
|
|
|
};
|