From b3262b5060a18ed38d167d342c162cb71f18f3ff Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Thu, 11 Jul 2024 17:35:22 +0200 Subject: [PATCH] fix(predicate): request params with a key but no value should be considered unset --- controller/predicates/hasRequestParameter.js | 6 ++++-- .../predicates/hasRequestParameter.js | 21 ++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/controller/predicates/hasRequestParameter.js b/controller/predicates/hasRequestParameter.js index 81e04b0fc..cb4c44bd2 100644 --- a/controller/predicates/hasRequestParameter.js +++ b/controller/predicates/hasRequestParameter.js @@ -3,13 +3,15 @@ const Debug = require('../../helper/debug'); const debugLog = new Debug('controller:predicates:has_request_parameter'); const stackTraceLine = require('../../helper/stackTraceLine'); -// returns true IFF req.clean has a key with the supplied name +// returns true IFF req.clean has a key with the supplied name AND a non-empty value module.exports = (parameter) => (req, res) => { - const has_request_parameter = _.has(req, ['clean', parameter]); + const value = _.get(req, ['clean', parameter]); + const has_request_parameter = _.isNumber(value) || !_.isEmpty(value); debugLog.push(req, () => ({ reply: {[parameter]: has_request_parameter}, stack_trace: stackTraceLine() })); + return has_request_parameter; }; diff --git a/test/unit/controller/predicates/hasRequestParameter.js b/test/unit/controller/predicates/hasRequestParameter.js index 3ddf20894..889d8f7de 100644 --- a/test/unit/controller/predicates/hasRequestParameter.js +++ b/test/unit/controller/predicates/hasRequestParameter.js @@ -12,7 +12,7 @@ module.exports.tests.interface = (test, common) => { module.exports.tests.true_conditions = (test, common) => { test('request with specified parameter should return true', t => { - [[], {}, 'string value', 17].forEach(val => { + [['foo'], {foo: 'bar'}, 'string value', 0, 17].forEach(val => { const req = { clean: { 'parameter name': val @@ -29,6 +29,25 @@ module.exports.tests.true_conditions = (test, common) => { }; +module.exports.tests.empty_values = (test, common) => { + test('request with specified parameter, but empty value, should true', t => { + [[], {}, '', null, undefined].forEach(val => { + const req = { + clean: { + 'parameter name': val + } + }; + + t.notOk(hasRequestParameter('parameter name')(req)); + + }); + + t.end(); + + }); + +}; + module.exports.tests.false_conditions = (test, common) => { test('request with undefined clean should return false', t => { const req = {};