diff --git a/query/reverse.js b/query/reverse.js index 6f145680b..db9889fe5 100644 --- a/query/reverse.js +++ b/query/reverse.js @@ -1,5 +1,6 @@ const _ = require('lodash'); const peliasQuery = require('pelias-query'); +const peliasConfig = require('pelias-config').generate(); const defaults = require('./reverse_defaults'); //------------------------------ @@ -39,8 +40,7 @@ function generateQuery( clean ){ // layers if( _.isArray(clean.layers) && !_.isEmpty(clean.layers) ) { - // only include non-coarse layers - vs.var( 'layers', _.intersection(clean.layers, ['address', 'street', 'venue'])); + vs.var( 'layers', _.difference(clean.layers, peliasConfig.get('api.targets.layer_aliases.coarse', []))); } // focus point to score by distance diff --git a/query/reverse_defaults.js b/query/reverse_defaults.js index 2bca3a59a..727c361a6 100644 --- a/query/reverse_defaults.js +++ b/query/reverse_defaults.js @@ -5,7 +5,6 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'size': 1, 'track_scores': true, - 'layers': ['venue', 'address', 'street'], 'centroid:field': 'center_point', diff --git a/test/unit/query/reverse.js b/test/unit/query/reverse.js index 9813bf2f6..6455127ab 100644 --- a/test/unit/query/reverse.js +++ b/test/unit/query/reverse.js @@ -57,8 +57,7 @@ module.exports.tests.query = (test, common) => { t.notOk(query.body.vs.isset('input:categories')); t.notOk(query.body.vs.isset('boundary:gid')); - t.deepEquals(query.body.score_functions, [ - ]); + t.deepEquals(query.body.score_functions, []); t.deepEquals(query.body.filter_functions, [ 'boundary_circle view', @@ -209,12 +208,36 @@ module.exports.tests.layers = (test, common) => { }); - test('non-empty array clean.layers should only set non-coarse layers in vs', t => { + test('non-empty array clean.layers should only set non-coarse layers in vs, using user-defined configuration for coarse layers', t => { const clean = { layers: all_layers }; + const coarseLayers = [ + 'country', + 'county', + 'locality' + ]; + + const config_with_coarse_layers = { + generate: function () { + return { + api: { + targets: { + layer_aliases: { + coarse: coarseLayers + } + } + }, + get: function () { + return coarseLayers; + }, + }; + } + }; + const query = proxyquire('../../../query/reverse', { + 'pelias-config': config_with_coarse_layers, 'pelias-query': { layout: { FilteredBooleanQuery: MockQuery @@ -225,11 +248,31 @@ module.exports.tests.layers = (test, common) => { './reverse_defaults': {} })(clean); - t.deepEquals(query.body.vs.var('layers').toString(), ['address', 'venue', 'street']); + t.deepEquals(query.body.vs.var('layers').toString(), _.difference(clean.layers, ['country', 'county', 'locality'])); t.end(); }); + test('non-empty array clean.layers should only set non-coarse layers in vs, using default configuration for coarse layers', t => { + const clean = { + layers: all_layers + }; + + const query = proxyquire('../../../query/reverse', { + 'pelias-query': { + layout: { + FilteredBooleanQuery: MockQuery + }, + view: views, + Vars: require('pelias-query').Vars + }, + './reverse_defaults': {} + })(clean); + + t.deepEquals(query.body.vs.var('layers').toString(), [ 'address', 'venue', 'street' ]); + t.end(); + + }); }; module.exports.tests.focus_point = (test, common) => {