fix: accept string-represented values in required array runtime validation (#5609)
* rename `listCheck` -> `arrayListCheck` * allow non-empty strings to quality a required array value
This commit is contained in:
@@ -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"])
|
||||
|
||||
|
||||
@@ -603,6 +603,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 = {
|
||||
required: true,
|
||||
@@ -630,6 +638,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 = {
|
||||
required: true,
|
||||
|
||||
Reference in New Issue
Block a user