fix(oas3): add support for oneOf/anyOf JSON Schema keywords in request-body rendering (#9767)

Refs #9763
This commit is contained in:
Oliwia Rogala
2024-03-29 14:08:48 +01:00
committed by GitHub
parent 8086d97e76
commit ed983eb260
3 changed files with 16 additions and 22 deletions

View File

@@ -1,7 +1,7 @@
import React from "react"
import PropTypes from "prop-types"
import ImPropTypes from "react-immutable-proptypes"
import { Map, OrderedMap, List } from "immutable"
import { Map, OrderedMap, List, fromJS } from "immutable"
import { getCommonExtensions, stringify, isEmptyValue } from "core/utils"
import { getKnownSyntaxHighlighterLanguage } from "core/utils/jsonParse"
@@ -153,24 +153,9 @@ const RequestBody = ({
Map.isMap(bodyProperties) && bodyProperties.entrySeq().map(([key, schema]) => {
if (schema.get("readOnly")) return
const schemaWithoutKeywords = schema.filter((v, k) => k !== "oneOf"
&& k !== "anyOf"
&& k !== "$$ref"
)
if (schemaWithoutKeywords.size === 0) {
const oneOf = schema.get("oneOf")
const anyOf = schema.get("anyOf")
const nestedSchema = List.isList(oneOf)
? oneOf.get(0)
: List.isList(anyOf)
? anyOf.get(0)
: null
if (Map.isMap(nestedSchema)) {
schema = nestedSchema
}
}
const oneOf = schema.get("oneOf")?.get(0)?.toJS()
const anyOf = schema.get("anyOf")?.get(0)?.toJS()
schema = fromJS(fn.mergeJsonSchema(schema.toJS(), oneOf ?? anyOf ?? {}))
let commonExt = showCommonExtensions ? getCommonExtensions(schema) : null
const required = schemaForMediaType.get("required", List()).includes(key)

View File

@@ -11,7 +11,7 @@ describe("OpenAPI 3.0 oneOf and anyOf example", () => {
.get(".try-out__btn")
.click()
.get("textarea")
.contains("documentDate")
.contains("NestedSchemaExample.pdf")
.should("exist")
cy.contains("/documentsWithCombineOneOf").click()
cy.contains("/documentsWithCombineAnyOf")
@@ -20,7 +20,7 @@ describe("OpenAPI 3.0 oneOf and anyOf example", () => {
.contains("Try it out")
.click()
.get("textarea")
.contains("documentDate")
.contains("ParentSchemaExample.pdf")
.should("exist")
}
)

View File

@@ -51,7 +51,7 @@ components:
type: string
default: ''
maxLength: 64
example: MyDocument.pdf'
example: NestedSchemaExample.pdf'
category:
type: string
pattern: ''
@@ -172,6 +172,15 @@ components:
- $ref: '#/components/schemas/ModelPostDocumentPolicy'
- $ref: '#/components/schemas/ModelPostDocumentCustomer'
- $ref: '#/components/schemas/ModelPostDocumentInvoice'
example:
title: ParentSchemaExample.pdf
category: Policy
type: Policy
issuingApplicationId: App1
documentDate: '2021-01-01'
sharedWith:
- CustomerPortal
policyNumber: '132456'
ModelPostDocumentAnyOfCombineModelFile:
allOf:
- $ref: '#/components/schemas/ModelFile'