未验证 提交 00c8e964 编写于 作者: K kyle 提交者: GitHub

fix: accept string-represented values in required array runtime validation (#5609)

* rename `listCheck` -> `arrayListCheck`

* allow non-empty strings to quality a required array value
上级 85f2bf36
......@@ -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"])
......
......@@ -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 = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册