Skip to content

Commit

Permalink
fix(oas3): compensate for JSON Schemas left unresolved by swagger-cli…
Browse files Browse the repository at this point in the history
…ent (#9794)

Refs #9790
  • Loading branch information
glowcloud committed Apr 10, 2024
1 parent b6b0d28 commit 3bea389
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 7 deletions.
18 changes: 11 additions & 7 deletions src/core/components/model.jsx
Expand Up @@ -66,16 +66,20 @@ export default class Model extends ImmutablePureComponent {
/*
* If we have an unresolved ref, get the schema and name from the ref.
* If the ref is external, we can't resolve it, so we just display the ref location.
* This is for situations where the ref was not resolved by Swagger Client
* because we reached the traversal depth limit.
* This is for situations where:
* - the ref was not resolved by Swagger Client because we reached the traversal depth limit
* - we had a circular ref inside the allOf keyword
*/
if ($ref) {
name = this.getModelName($ref)
const refSchema = this.getRefSchema(name)
const refName = this.getModelName($ref)
const refSchema = this.getRefSchema(refName)
if (Map.isMap(refSchema)) {
schema = refSchema.set("$$ref", $ref)
$$ref = $ref
} else {
schema = refSchema.mergeDeep(schema)
if (!$$ref) {
schema = schema.set("$$ref", $ref)
$$ref = $ref
}
} else if (Map.isMap(schema) && schema.size === 1) {
schema = null
name = $ref
}
Expand Down
@@ -0,0 +1,31 @@
/**
* @prettier
*/

describe("OpenAPI 3.0 spec with allOf containing a circular reference", () => {
it("should render correct title and properties", () => {
cy.visit("/?url=/documents/features/oas3-all-of-circular-ref.yaml").then(
() => {
cy.get("[id='model-OneOfParent']").find("button").click()
cy.get(".property-row")
.contains("additionalData")
.siblings()
.as("additionalData")
cy.get("@additionalData").find("button").click()
cy.get("@additionalData")
.find("span")
.contains("FirstOneOf")
.should("exist")
.click()
cy.get("@additionalData")
.find("span")
.contains("numberProp")
.should("exist")
cy.get("@additionalData")
.find("span")
.contains("additionalData")
.should("exist")
}
)
})
})
@@ -0,0 +1,69 @@
openapi: 3.0.0
info:
title: Test
description: 'Test'
license:
name: 'Apache 2.0'
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
version: '1.0'
servers:
-
url: 'https://localhost:8000'
components:
schemas:
OneOfParent:
title: OneOfParent
properties:
additionalData:
oneOf:
-
$ref: '#/components/schemas/FirstOneOf'
-
$ref: '#/components/schemas/SecondOneOf'
-
$ref: '#/components/schemas/ThirdOneOf'
type: object
FirstOneOf:
title: FirstOneOf
type: object
allOf:
-
$ref: '#/components/schemas/OneOfParent'
-
properties:
numberProp:
type: number
example: '1'
type: object
SecondOneOf:
title: SecondOneOf
type: object
allOf:
-
$ref: '#/components/schemas/OneOfParent'
-
properties:
person:
properties:
id:
type: string
type: object
type: object
ThirdOneOf:
title: ThirdOneOf
type: object
allOf:
-
$ref: '#/components/schemas/OneOfParent'
-
properties:
person:
properties:
id:
type: string
name:
type: string
surname:
type: string
type: object
type: object

0 comments on commit 3bea389

Please sign in to comment.