Skip to content

Commit 3a05567

Browse files
committed
fix(predicate): Fix address related layers detection
This fixes an error in the logic from #1307. The `address_search_with_ids` query can only return results in the address or street layers. However, the predicate logic was allowing the query to execute if _any_ admin layer was specified, which could allow such a query to return street or address layers when not intended.
1 parent 287f8f0 commit 3a05567

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

Diff for: controller/predicates/is_request_layers_any_address_related.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ const Debug = require('../../helper/debug');
33
const debugLog = new Debug('controller:predicates:is_request_layers_any_address_related');
44
const stackTraceLine = require('../../helper/stackTraceLine');
55

6-
const admin_placetypes = require('../../helper/placeTypes');
7-
86
// return true if any layers allowed by the query are related to an address query
9-
// this includes address, street, and any admin layers, but NOT venue and custom layers
7+
// this includes address and street but NOT venue, postalcode, admin, and custom layers
108
module.exports = (req, res) => {
11-
const address_related_layers = admin_placetypes.concat(['address', 'street']);
9+
const address_related_layers = ['address', 'street'];
1210

1311
const request_layers = _.get(req, 'clean.layers', []);
1412
let result;

Diff for: test/unit/controller/predicates/is_request_layers_any_address_related.js

+19-4
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,22 @@ module.exports.tests.true_conditions = (test, common) => {
1111
t.end();
1212
});
1313

14-
test('admin layers only should return true', t => {
15-
const req = { clean: { layers: ['locality', 'county', 'country'] } };
14+
test('street layer only should return true', t => {
15+
const req = { clean: { layers: ['street'] } };
1616

1717
t.ok(is_request_layers_any_address_related(req));
1818
t.end();
1919
});
2020

21-
test('street and admin layers', t => {
22-
const req = { clean: { layers: ['street', 'locality', 'country'] } };
21+
test('address and postalcode layers should return true', t => {
22+
const req = { clean: { layers: ['address', 'postalcode'] } };
23+
24+
t.ok(is_request_layers_any_address_related(req));
25+
t.end();
26+
});
27+
28+
test('street and admin layers should return true', t => {
29+
const req = { clean: { layers: ['street', 'macrocounty'] } };
2330

2431
t.ok(is_request_layers_any_address_related(req));
2532
t.end();
@@ -40,6 +47,14 @@ module.exports.tests.false_conditions = (test, common) => {
4047
t.notOk(is_request_layers_any_address_related(req));
4148
t.end();
4249
});
50+
51+
test('admin layers only should return false', t => {
52+
const req = { clean: { layers: ['locality', 'county', 'country'] } };
53+
54+
t.notOk(is_request_layers_any_address_related(req));
55+
t.end();
56+
});
57+
4358
};
4459

4560
module.exports.all = (tape, common) => {

0 commit comments

Comments
 (0)