diff --git a/sanitizer/_text_addressit.js b/sanitizer/_text_addressit.js index 6cf31f4d..81f7cc7c 100644 --- a/sanitizer/_text_addressit.js +++ b/sanitizer/_text_addressit.js @@ -3,6 +3,9 @@ var parser = require('addressit'); var _ = require('lodash'); var logger = require('pelias-logger').get('api'); +// ref: https://en.wikipedia.org/wiki/Quotation_mark +const QUOTES = `"'«»‘’‚‛“”„‟‹›⹂「」『』〝〞〟﹁﹂﹃﹄"'「」`; + // validate texts, convert types and apply defaults function _sanitize( raw, clean ){ @@ -10,7 +13,8 @@ function _sanitize( raw, clean ){ var messages = { errors: [], warnings: [] }; // invalid input 'text' - if( !check.nonEmptyString( raw.text ) ){ + const text = _.trim( _.trim( raw.text ), QUOTES ); + if( !check.nonEmptyString( text ) ){ messages.errors.push('invalid param \'text\': text length, must be >0'); } @@ -18,7 +22,7 @@ function _sanitize( raw, clean ){ else { // valid text - clean.text = raw.text; + clean.text = text; clean.parser = 'addressit'; // remove anything that may have been parsed before diff --git a/test/unit/sanitizer/_text_addressit.js b/test/unit/sanitizer/_text_addressit.js index 5fad89a8..6db5472b 100644 --- a/test/unit/sanitizer/_text_addressit.js +++ b/test/unit/sanitizer/_text_addressit.js @@ -339,6 +339,20 @@ module.exports.tests.text_parser = function(test, common) { }); + test('whitespace-only input counts as empty', (t) => { + const raw = { text: ' ' }; + const clean = {}; + + const expected_clean = {}; + + const messages = sanitizer.sanitize(raw, clean); + + t.deepEquals(clean, expected_clean); + t.deepEquals(messages.errors, ['invalid param \'text\': text length, must be >0']); + t.deepEquals(messages.warnings, [], 'no warnings'); + t.end(); + }); + test('return an array of expected parameters in object form for validation', (t) => { const expected = [{ name: 'text' }]; const validParameters = sanitizer.expected();