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);