From 00c8e964e719790a2df0e0fd90963cd5c828a018 Mon Sep 17 00:00:00 2001 From: kyle Date: Sun, 15 Sep 2019 12:17:42 -0700 Subject: [PATCH] fix: accept string-represented values in required array runtime validation (#5609) * rename `listCheck` -> `arrayListCheck` * allow non-empty strings to quality a required array value --- src/core/utils.js | 9 +++++---- test/mocha/core/utils.js | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/core/utils.js b/src/core/utils.js index 0be1f097..f410d249 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -523,7 +523,8 @@ export const validateParam = (param, value, { isOAS3 = false, bypassRequiredChec // These checks should evaluate to true if there is a parameter let stringCheck = type === "string" && value let arrayCheck = type === "array" && Array.isArray(value) && value.length - let listCheck = type === "array" && Im.List.isList(value) && value.count() + let arrayListCheck = type === "array" && Im.List.isList(value) && value.count() + let arrayStringCheck = type === "array" && typeof value === "string" && value let fileCheck = type === "file" && value instanceof win.File let booleanCheck = type === "boolean" && (value || value === false) let numberCheck = type === "number" && (value || value === 0) @@ -543,8 +544,8 @@ export const validateParam = (param, value, { isOAS3 = false, bypassRequiredChec // } const allChecks = [ - stringCheck, arrayCheck, listCheck, fileCheck, booleanCheck, - numberCheck, integerCheck, objectCheck, objectStringCheck, + stringCheck, arrayCheck, arrayListCheck, arrayStringCheck, fileCheck, + booleanCheck, numberCheck, integerCheck, objectCheck, objectStringCheck, ] const passedAnyCheck = allChecks.some(v => !!v) @@ -605,7 +606,7 @@ export const validateParam = (param, value, { isOAS3 = false, bypassRequiredChec } else if ( type === "array" ) { let itemType - if ( !listCheck || !value.count() ) { return errors } + if ( !arrayListCheck || !value.count() ) { return errors } itemType = paramDetails.getIn(["items", "type"]) diff --git a/test/mocha/core/utils.js b/test/mocha/core/utils.js index fa26a38f..8372b9c0 100644 --- a/test/mocha/core/utils.js +++ b/test/mocha/core/utils.js @@ -602,6 +602,14 @@ describe("utils", function() { } value = [] assertValidateParam(param, value, ["Required field is not provided"]) + + // invalid (empty) array, represented as a string + param = { + required: true, + type: "array" + } + value = "" + assertValidateParam(param, value, ["Required field is not provided"]) // invalid (not an array) param = { @@ -629,6 +637,14 @@ describe("utils", function() { } value = [1] assertValidateParam(param, value, []) + + // valid array, with no 'type' for items, represented as a string + param = { + required: true, + type: "array" + } + value = "[1]" + assertValidateParam(param, value, []) // valid array, items match type param = {