feat(RequestBody): validation support for required fields (#6223)
fixes #5181 * application/json * application/xml * application/x-www-form-urlencoded * Set requestBodyValue values to be an immutable Map, as "value". Previously stored as a normal String. * This enables adding "errors" to the Map, for validation use * note: getOAS3RequiredRequestBodyContentType requires state.spec, * which is not available to state.oas3
This commit is contained in:
@@ -406,7 +406,19 @@ export const executeRequest = (req) =>
|
||||
if(isJSONObject(requestBody)) {
|
||||
req.requestBody = JSON.parse(requestBody)
|
||||
} else if(requestBody && requestBody.toJS) {
|
||||
req.requestBody = requestBody.filter((value, key) => !isEmptyValue(value) || requestBodyInclusionSetting.get(key)).toJS()
|
||||
req.requestBody = requestBody
|
||||
.map(
|
||||
(val) => {
|
||||
if (Map.isMap(val)) {
|
||||
return val.get("value")
|
||||
}
|
||||
return val
|
||||
}
|
||||
)
|
||||
.filter(
|
||||
(value, key) => !isEmptyValue(value) || requestBodyInclusionSetting.get(key)
|
||||
)
|
||||
.toJS()
|
||||
} else{
|
||||
req.requestBody = requestBody
|
||||
}
|
||||
|
||||
@@ -314,7 +314,6 @@ export const parameterWithMetaByIdentity = (state, pathMethod, param) => {
|
||||
hashKeyedMeta
|
||||
)
|
||||
})
|
||||
|
||||
return mergedParams.find(curr => curr.get("in") === param.get("in") && curr.get("name") === param.get("name"), OrderedMap())
|
||||
}
|
||||
|
||||
@@ -327,7 +326,6 @@ export const parameterInclusionSettingFor = (state, pathMethod, paramName, param
|
||||
export const parameterWithMeta = (state, pathMethod, paramName, paramIn) => {
|
||||
const opParams = specJsonWithResolvedSubtrees(state).getIn(["paths", ...pathMethod, "parameters"], OrderedMap())
|
||||
const currentParam = opParams.find(param => param.get("in") === paramIn && param.get("name") === paramName, OrderedMap())
|
||||
|
||||
return parameterWithMetaByIdentity(state, pathMethod, currentParam)
|
||||
}
|
||||
|
||||
@@ -364,7 +362,6 @@ export const hasHost = createSelector(
|
||||
// Get the parameter values, that the user filled out
|
||||
export function parameterValues(state, pathMethod, isXml) {
|
||||
pathMethod = pathMethod || []
|
||||
// let paramValues = state.getIn(["meta", "paths", ...pathMethod, "parameters"], fromJS([]))
|
||||
let paramValues = operationWithMeta(state, ...pathMethod).get("parameters", List())
|
||||
return paramValues.reduce( (hash, p) => {
|
||||
let value = isXml && p.get("in") === "body" ? p.get("value_xml") : p.get("value")
|
||||
@@ -495,6 +492,28 @@ export const validateBeforeExecute = ( state, pathMethod ) => {
|
||||
return isValid
|
||||
}
|
||||
|
||||
export const getOAS3RequiredRequestBodyContentType = (state, pathMethod) => {
|
||||
let requiredObj = {
|
||||
requestBody: false,
|
||||
requestContentType: {}
|
||||
}
|
||||
let requestBody = state.getIn(["resolvedSubtrees", "paths", ...pathMethod, "requestBody"], fromJS([]))
|
||||
if (requestBody.size < 1) {
|
||||
return requiredObj
|
||||
}
|
||||
if (requestBody.getIn(["required"])) {
|
||||
requiredObj.requestBody = requestBody.getIn(["required"])
|
||||
}
|
||||
requestBody.getIn(["content"]).entrySeq().forEach((contentType) => { // e.g application/json
|
||||
const key = contentType[0]
|
||||
if (contentType[1].getIn(["schema", "required"])) {
|
||||
const val = contentType[1].getIn(["schema", "required"]).toJS()
|
||||
requiredObj.requestContentType[key] = val
|
||||
}
|
||||
})
|
||||
return requiredObj
|
||||
}
|
||||
|
||||
function returnSelfOrNewMap(obj) {
|
||||
// returns obj if obj is an Immutable map, else returns a new Map
|
||||
return Map.isMap(obj) ? obj : new Map()
|
||||
|
||||
Reference in New Issue
Block a user