diff --git a/helper/geojsonify_place_details.js b/helper/geojsonify_place_details.js index b546c9a9..c80da8b1 100644 --- a/helper/geojsonify_place_details.js +++ b/helper/geojsonify_place_details.js @@ -46,6 +46,9 @@ const DETAILS_PROPS = [ { name: 'continent', type: 'string' }, { name: 'continent_gid', type: 'string' }, { name: 'continent_a', type: 'string' }, + { name: 'empire', type: 'string', condition: _.negate(hasCountry) }, + { name: 'empire_gid', type: 'string', condition: _.negate(hasCountry) }, + { name: 'empire_a', type: 'string', condition: _.negate(hasCountry) }, { name: 'ocean', type: 'string' }, { name: 'ocean_gid', type: 'string' }, { name: 'ocean_a', type: 'string' }, @@ -57,6 +60,11 @@ const DETAILS_PROPS = [ { name: 'category', type: 'array', condition: checkCategoryParam } ]; +// returns true IFF source a country_gid property +function hasCountry(params, source) { + return source.hasOwnProperty('country_gid'); +} + function checkCategoryParam(params) { return _.isObject(params) && params.hasOwnProperty('categories'); } @@ -72,7 +80,7 @@ function checkCategoryParam(params) { function collectProperties( params, source ) { return DETAILS_PROPS.reduce((result, prop) => { // if condition isn't met, don't set the property - if (_.isFunction(prop.condition) && !prop.condition(params)) { + if (_.isFunction(prop.condition) && !prop.condition(params, source)) { return result; } diff --git a/test/unit/helper/geojsonify_place_details.js b/test/unit/helper/geojsonify_place_details.js index c1fe22da..c7f2c8ac 100644 --- a/test/unit/helper/geojsonify_place_details.js +++ b/test/unit/helper/geojsonify_place_details.js @@ -532,6 +532,52 @@ module.exports.tests.geojsonify_place_details = (test, common) => { }; +module.exports.tests.empire_specific = (test, common) => { + test('empire* properties should not be output when country_gid property is available', t => { + const source = { + country_gid: 'country_gid value', + empire: 'empire value', + empire_gid: 'empire_gid value', + empire_a: 'empire_a value', + label: 'label value' + }; + + const expected = { + country_gid: 'country_gid value', + label: 'label value' + }; + + const actual = geojsonify({}, source); + + t.deepEqual(actual, expected); + t.end(); + + }); + + test('empire* properties should be output when country_gid property is not available', t => { + const source = { + empire: 'empire value', + empire_gid: 'empire_gid value', + empire_a: 'empire_a value', + label: 'label value' + }; + + const expected = { + empire: 'empire value', + empire_gid: 'empire_gid value', + empire_a: 'empire_a value', + label: 'label value' + }; + + const actual = geojsonify({}, source); + + t.deepEqual(actual, expected); + t.end(); + + }); + +}; + module.exports.all = (tape, common) => { function test(name, testFunction) {