var geojsonify = require('../../../helper/geojsonify'); module.exports.tests = {}; module.exports.tests.interface = function(test, common) { test('valid interface', function(t) { t.equal(typeof geojsonify, 'function', 'geojsonify is a function'); t.equal(geojsonify.length, 3, 'accepts x arguments'); t.end(); }); }; // ref: https://github.com/pelias/pelias/issues/84 module.exports.tests.earth = function(test, common) { test('earth', function(t) { var earth = [{ '_type': 'geoname', '_id': '6295630', 'source': 'whosonfirst', 'layer': 'continent', 'name': { 'default': 'Earth' }, 'center_point': { 'lon': 0, 'lat': 0 } }]; t.doesNotThrow(function(){ geojsonify( {}, earth ); }); t.end(); }); }; module.exports.tests.geojsonify = function(test, common) { test('geojsonify(doc)', function(t) { var input = [ { '_id': 'id1', '_type': 'layer1', 'source': 'source1', 'source_id': 'source_id_1', 'layer': 'layer1', 'center_point': { 'lat': 51.5337144, 'lon': -0.1069716 }, 'name': { 'default': '\'Round Midnight Jazz and Blues Bar' }, 'housenumber': '13', 'street': 'Liverpool Road', 'postalcode': 'N1 0RW', 'country_a': 'GBR', 'country': 'United Kingdom', 'dependency': 'dependency name', 'region': 'Islington', 'region_a': 'ISL', 'macroregion': 'England', 'county': 'Angel', 'localadmin': 'test1', 'locality': 'test2', 'neighbourhood': 'test3', 'category': [ 'food', 'nightlife' ] }, { '_id': 'id2', '_type': 'layer2', 'source': 'source2', 'source_id': 'source_id_2', 'layer': 'layer2', 'name': { 'default': 'Blues Cafe' }, 'center_point': { 'lat': '51.517806', 'lon': '-0.101795' }, 'country_a': 'GBR', 'country': 'United Kingdom', 'dependency': 'dependency name', 'region': 'City And County Of The City Of London', 'region_a': 'COL', 'macroregion': 'England', 'county': 'Smithfield', 'localadmin': 'test1', 'locality': 'test2', 'neighbourhood': 'test3' }, { '_id': 'node:34633854', '_type': 'venue', 'source': 'openstreetmap', 'source_id': 'source_id_3', 'layer': 'venue', 'name': { 'default': 'Empire State Building' }, 'center_point': { 'lat': '40.748432', 'lon': '-73.985656' }, 'country_a': 'USA', 'country': 'United States', 'dependency': 'dependency name', 'region': 'New York', 'region_a': 'NY', 'county': 'New York', 'borough': 'Manhattan', 'locality': 'New York', 'neighbourhood': 'Koreatown', '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', 'gid': 'source1:layer1:id1', 'layer': 'layer1', 'source': 'source1', 'source_id': 'source_id_1', 'name': '\'Round Midnight Jazz and Blues Bar', 'country_a': 'GBR', 'country': 'United Kingdom', 'dependency': 'dependency name', 'macroregion': 'England', 'region': 'Islington', 'region_a': 'ISL', 'county': 'Angel', 'localadmin': 'test1', 'locality': 'test2', 'neighbourhood': 'test3', 'housenumber': '13', 'street': 'Liverpool Road', 'postalcode': 'N1 0RW', 'category': [ 'food', 'nightlife' ] } }, { 'type': 'Feature', 'geometry': { 'type': 'Point', 'coordinates': [ -0.101795, 51.517806 ] }, 'properties': { 'id': 'id2', 'gid': 'source2:layer2:id2', 'layer': 'layer2', 'source': 'source2', 'source_id': 'source_id_2', 'name': 'Blues Cafe', 'country_a': 'GBR', 'country': 'United Kingdom', 'dependency': 'dependency name', 'macroregion': 'England', 'region': 'City And County Of The City Of London', 'region_a': 'COL', 'county': 'Smithfield', 'localadmin': 'test1', 'locality': 'test2', 'neighbourhood': 'test3' } }, { 'type': 'Feature', 'geometry': { 'type': 'Point', 'coordinates': [ -73.985656, 40.748432 ] }, 'properties': { 'id': 'node:34633854', 'gid': 'openstreetmap:venue:node:34633854', 'layer': 'venue', 'source': 'openstreetmap', 'source_id': 'source_id_3', 'name': 'Empire State Building', 'country_a': 'USA', 'country': 'United States', 'dependency': 'dependency name', 'region': 'New York', 'region_a': 'NY', 'county': 'New York', 'borough': 'Manhattan', 'locality': 'New York', 'neighbourhood': 'Koreatown', 'category': [ 'tourism', 'transport' ] } } ] }; var json = geojsonify( {categories: 'foo'}, input ); t.deepEqual(json, expected, 'all docs mapped'); t.end(); }); test('filtering out empty items', function (t) { var input = [ { 'bounding_box': { 'min_lat': 40.6514712164, 'max_lat': 40.6737320588, 'min_lon': -73.8967895508, 'max_lon': -73.8665771484 }, 'locality': [ 'New York' ], 'source': 'whosonfirst', 'layer': 'neighbourhood', 'population': 173198, 'popularity': 495, 'center_point': { 'lon': -73.881319, 'lat': 40.663303 }, 'name': { 'default': 'East New York' }, 'source_id': '85816607', 'category': ['government'], '_id': '85816607', '_type': 'neighbourhood', '_score': 21.434, 'confidence': 0.888, 'country': [ 'United States' ], 'country_gid': [ '85633793' ], 'country_a': [ 'USA' ], 'dependency': [ 'dependency name' ], 'dependency_gid': [ 'dependency id' ], 'dependency_a': [ 'dependency abbrevation' ], 'macroregion': [ 'MacroRegion Name' ], 'macroregion_gid': [ 'MacroRegion Id' ], 'macroregion_a': [ 'MacroRegion Abbreviation' ], 'region': [ 'New York' ], 'region_gid': [ '85688543' ], 'region_a': [ 'NY' ], 'macrocounty': [ 'MacroCounty Name' ], 'macrocounty_gid': [ 'MacroCounty Id' ], 'macrocounty_a': [ 'MacroCounty Abbreviation' ], 'county': [ 'Kings County' ], 'county_gid': [ '102082361' ], 'county_a': [ null ], 'borough': [ 'Brooklyn' ], 'localadmin_gid': [ '404521211' ], 'borough_a': [ null ], 'locality_gid': [ '85977539' ], 'locality_a': [ null ], 'neighbourhood': [], 'neighbourhood_gid': [] } ]; var expected = { 'type': 'FeatureCollection', 'bbox': [-73.8967895508, 40.6514712164, -73.8665771484, 40.6737320588], 'features': [ { 'type': 'Feature', 'properties': { 'id': '85816607', 'gid': 'whosonfirst:neighbourhood:85816607', 'layer': 'neighbourhood', 'source': 'whosonfirst', 'source_id': '85816607', 'name': 'East New York', 'category': ['government'], 'confidence': 0.888, 'country': 'United States', 'country_gid': '85633793', 'country_a': 'USA', 'dependency': 'dependency name', 'dependency_gid': 'dependency id', 'dependency_a': 'dependency abbrevation', 'macroregion': 'MacroRegion Name', 'macroregion_gid': 'MacroRegion Id', 'macroregion_a': 'MacroRegion Abbreviation', 'region': 'New York', 'region_gid': '85688543', 'region_a': 'NY', 'macrocounty': 'MacroCounty Name', 'macrocounty_gid': 'MacroCounty Id', 'macrocounty_a': 'MacroCounty Abbreviation', 'county': 'Kings County', 'borough': 'Brooklyn', 'county_gid': '102082361', 'localadmin_gid': '404521211', 'locality': 'New York', 'locality_gid': '85977539' }, 'bbox': [-73.8967895508,40.6514712164,-73.8665771484,40.6737320588], 'geometry': { 'type': 'Point', 'coordinates': [ -73.881319, 40.663303 ] } } ] }; var json = geojsonify( {categories: 'foo'}, input ); t.deepEqual(json, expected, 'all wanted properties exposed'); t.end(); }); }; module.exports.tests.categories = function (test, common) { test('only set category if categories filter was used', function (t) { var input = [ { '_id': '85816607', 'bounding_box': { 'min_lat': 40.6514712164, 'max_lat': 40.6737320588, 'min_lon': -73.8967895508, 'max_lon': -73.8665771484 }, 'source': 'whosonfirst', 'layer': 'neighbourhood', 'center_point': { 'lon': -73.881319, 'lat': 40.663303 }, 'name': { 'default': 'East New York' }, 'source_id': '85816607', 'category': ['government'] } ]; var expected = { 'type': 'FeatureCollection', 'bbox': [-73.8967895508, 40.6514712164, -73.8665771484, 40.6737320588], 'features': [ { 'type': 'Feature', 'properties': { 'id': '85816607', 'gid': 'whosonfirst:neighbourhood:85816607', 'layer': 'neighbourhood', 'source': 'whosonfirst', 'source_id': '85816607', 'name': 'East New York', 'category': ['government'] }, 'bbox': [-73.8967895508,40.6514712164,-73.8665771484,40.6737320588], 'geometry': { 'type': 'Point', 'coordinates': [ -73.881319, 40.663303 ] } } ] }; var json = geojsonify( {categories: 'foo'}, input ); t.deepEqual(json, expected, 'all wanted properties exposed'); 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); } };