fix(oas3): switching media types should update schema properties (#6518)
* When the media-type is changed, there is a new `onChangeMediaType` method to handle actions. * If target schema properties key/value pairs does NOT equals current schema properties, clear the requestBodyValue, try-it-out request/response and validation params. * If target schema properties key/value pairs DOES equals current schema properties, do not change or re-render schema properties * oas3Selector `validateShallowRequired` now also validates required keys against target media-type Fixes #6201, #6250, #6476
This commit is contained in:
@@ -154,23 +154,23 @@ export const validateBeforeExecute = validateRequestBodyIsRequired(
|
||||
(state, pathMethod) => validateRequestBodyValueExists(state, pathMethod)
|
||||
)
|
||||
|
||||
export const validateShallowRequired = ( state, {oas3RequiredRequestBodyContentType, oas3RequestBodyValue} ) => {
|
||||
export const validateShallowRequired = (state, { oas3RequiredRequestBodyContentType, oas3RequestContentType, oas3RequestBodyValue} ) => {
|
||||
let missingRequiredKeys = []
|
||||
// context: json => String; urlencoded => Map
|
||||
// context: json => String; urlencoded, form-data => Map
|
||||
if (!Map.isMap(oas3RequestBodyValue)) {
|
||||
return missingRequiredKeys
|
||||
}
|
||||
let requiredKeys = []
|
||||
// We intentionally cycle through list of contentTypes for defined requiredKeys
|
||||
// instead of assuming first contentType will accurately list all expected requiredKeys
|
||||
// Alternatively, we could try retrieving the contentType first, and match exactly. This would be a more accurate representation of definition
|
||||
// Cycle through list of possible contentTypes for matching contentType and defined requiredKeys
|
||||
Object.keys(oas3RequiredRequestBodyContentType.requestContentType).forEach((contentType) => {
|
||||
let contentTypeVal = oas3RequiredRequestBodyContentType.requestContentType[contentType]
|
||||
contentTypeVal.forEach((requiredKey) => {
|
||||
if (requiredKeys.indexOf(requiredKey) < 0 ) {
|
||||
requiredKeys.push(requiredKey)
|
||||
}
|
||||
})
|
||||
if (contentType === oas3RequestContentType) {
|
||||
let contentTypeVal = oas3RequiredRequestBodyContentType.requestContentType[contentType]
|
||||
contentTypeVal.forEach((requiredKey) => {
|
||||
if (requiredKeys.indexOf(requiredKey) < 0 ) {
|
||||
requiredKeys.push(requiredKey)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
requiredKeys.forEach((key) => {
|
||||
let requiredKeyValue = oas3RequestBodyValue.getIn([key, "value"])
|
||||
|
||||
Reference in New Issue
Block a user