From 9a8e898ba9ab2facabf8eef08f58b34fd7f40c86 Mon Sep 17 00:00:00 2001 From: Joxit Date: Mon, 25 Nov 2019 15:47:12 +0100 Subject: [PATCH] feat(places-category): add categories to the places endpoint Categories are something really useful (and interesting) that's why they should also be available in the Places API. This PR will add categories when we use the endpoint places e.g `/v1/places?categories&ids=...` --- sanitizer/_categories.js | 12 ++++++-- sanitizer/place.js | 1 + test/unit/sanitizer/_categories.js | 49 ++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/sanitizer/_categories.js b/sanitizer/_categories.js index a7671d374..7b618845a 100644 --- a/sanitizer/_categories.js +++ b/sanitizer/_categories.js @@ -38,11 +38,19 @@ function _sanitize (raw, clean, categories) { return messages; } +function _alwaysBlank (raw, clean, categories) { + if (raw.hasOwnProperty('categories')) { + clean.categories = []; + } + + return { errors: [], warnings: [] }; +} + function _expected () { return [{ name: 'categories' }]; } // export function -module.exports = () => ({ - sanitize: _sanitize, +module.exports = (alwaysBlank) => ({ + sanitize: alwaysBlank ? _alwaysBlank : _sanitize, expected: _expected }); diff --git a/sanitizer/place.js b/sanitizer/place.js index 9b7c7fdb7..4395cc887 100644 --- a/sanitizer/place.js +++ b/sanitizer/place.js @@ -4,6 +4,7 @@ var sanitizeAll = require('../sanitizer/sanitizeAll'), debug: require('../sanitizer/_debug')(), ids: require('../sanitizer/_ids')(), private: require('../sanitizer/_flag_bool')('private', false), + categories: require('../sanitizer/_categories')(true), request_language: require('../sanitizer/_request_language')() }; diff --git a/test/unit/sanitizer/_categories.js b/test/unit/sanitizer/_categories.js index 655a7b0e0..d3fb7e651 100644 --- a/test/unit/sanitizer/_categories.js +++ b/test/unit/sanitizer/_categories.js @@ -183,6 +183,55 @@ module.exports.tests.invalid_categories = function(test, common) { }); }; +module.exports.tests.always_blank = function(test, common) { + const alwaysBlankSanitizer = require( '../../../sanitizer/_categories')(true); + test('garbage category', function(t) { + var req = { + query: { + categories: 'barf' + }, + clean: { } + }; + var expected_messages = { errors: [], warnings: [] }; + + var messages = alwaysBlankSanitizer.sanitize(req.query, req.clean); + + t.deepEqual(messages, expected_messages, 'error with message returned'); + t.deepEqual(req.clean.categories, [], 'should return empty array'); + t.end(); + }); + + test('all garbage categories', function(t) { + var req = { + query: { + categories: 'food' + }, + clean: { } + }; + var expected_messages = { errors: [], warnings: [] }; + + var messages = alwaysBlankSanitizer.sanitize(req.query, req.clean); + + t.deepEqual(messages, expected_messages, 'error with message returned'); + t.deepEqual(req.clean.categories, [], 'should return empty array'); + t.end(); + }); + + test('not defined categories', function(t) { + var req = { + query: { }, + clean: { } + }; + var expected_messages = { errors: [], warnings: [] }; + + var messages = alwaysBlankSanitizer.sanitize(req.query, req.clean); + + t.deepEqual(messages, expected_messages, 'error with message returned'); + t.deepEqual(req.clean.categories, undefined, 'categories should be undefined'); + t.end(); + }); +}; + module.exports.all = function (tape, common) { function test(name, testFunction) { return tape('SANITIZE _categories ' + name, testFunction);