feat(oas31): add support for OpenAPI 3.1.0 badge (#8502)

Refs #8501
This commit is contained in:
Vladimír Gorej
2023-03-23 10:13:20 +01:00
committed by GitHub
parent 1333d4dd2e
commit 16224263d1
6 changed files with 69 additions and 10 deletions

View File

@@ -32,3 +32,18 @@ export function OAS3ComponentWrapFactory(Component) {
} }
} }
} }
export function OAS30ComponentWrapFactory(Component) {
return (Ori, system) => (props) => {
if (typeof system.specSelectors?.isOAS30 === "function") {
if (system.specSelectors.isOAS30()) {
return <Component {...props} {...system} Ori={Ori}></Component>
} else {
return <Ori {...props}></Ori>
}
} else {
console.warn("OAS30 wrapper: couldn't get spec")
return null
}
}
}

View File

@@ -1,13 +1,19 @@
/**
* @prettier
*/
import React from "react" import React from "react"
import { OAS3ComponentWrapFactory } from "../helpers"
export default OAS3ComponentWrapFactory((props) => { import { OAS30ComponentWrapFactory } from "../helpers"
export default OAS30ComponentWrapFactory((props) => {
const { Ori } = props const { Ori } = props
return <span> return (
<span>
<Ori {...props} /> <Ori {...props} />
<small className="version-stamp"> <small className="version-stamp">
<pre className="version">OAS3</pre> <pre className="version">OAS 3.0</pre>
</small> </small>
</span> </span>
)
}) })

View File

@@ -11,6 +11,7 @@ import LicenseWrapper from "./wrap-components/license"
import ContactWrapper from "./wrap-components/contact" import ContactWrapper from "./wrap-components/contact"
import InfoWrapper from "./wrap-components/info" import InfoWrapper from "./wrap-components/info"
import VersionPragmaFilterWrapper from "./wrap-components/version-pragma-filter" import VersionPragmaFilterWrapper from "./wrap-components/version-pragma-filter"
import VersionStampWrapper from "./wrap-components/version-stamp"
import { import {
license as selectLicense, license as selectLicense,
contact as selectContact, contact as selectContact,
@@ -71,6 +72,7 @@ const OAS31Plugin = ({ fn }) => {
License: LicenseWrapper, License: LicenseWrapper,
Contact: ContactWrapper, Contact: ContactWrapper,
VersionPragmaFilter: VersionPragmaFilterWrapper, VersionPragmaFilter: VersionPragmaFilterWrapper,
VersionStamp: VersionStampWrapper,
}, },
statePlugins: { statePlugins: {
spec: { spec: {

View File

@@ -0,0 +1,21 @@
/**
* @prettier
*/
import React from "react"
const VersionStampWrapper = (Original, system) => (props) => {
if (system.specSelectors.isOAS31()) {
return (
<span>
<Original {...props} />
<small className="version-stamp">
<pre className="version">OAS 3.1</pre>
</small>
</span>
)
}
return <Original {...props} />
}
export default VersionStampWrapper

View File

@@ -5,7 +5,7 @@ describe("#4865: multiple invocations + OAS3 plugin", () => {
cy.visit("/?url=/documents/petstore-expanded.openapi.yaml") cy.visit("/?url=/documents/petstore-expanded.openapi.yaml")
.get("#swagger-ui") .get("#swagger-ui")
.get("pre.version") .get("pre.version")
.contains("OAS3") .contains("OAS 3.0")
}) })
it("test: should render the OAS3 badge correctly after re-initializing the UI", () => { it("test: should render the OAS3 badge correctly after re-initializing the UI", () => {
@@ -14,6 +14,6 @@ describe("#4865: multiple invocations + OAS3 plugin", () => {
.then(win => win.onload()) // re-initializes Swagger UI .then(win => win.onload()) // re-initializes Swagger UI
.get("#swagger-ui") .get("#swagger-ui")
.get("pre.version") .get("pre.version")
.contains("OAS3") .contains("OAS 3.0")
}) })
}) })

View File

@@ -0,0 +1,15 @@
describe("OpenAPI 3.x.y Badge", () => {
it("should display light green badge with version indicator for OpenAPI 3.0.x", () => {
cy.visit("/?url=/documents/petstore-expanded.openapi.yaml")
.get("#swagger-ui")
.get("pre.version")
.contains("OAS 3.0")
})
it("should display light green badge with version indicator for OpenAPI 3.1.0", () => {
cy.visit("/?url=/documents/features/info-openAPI31.yaml")
.get("#swagger-ui")
.get("pre.version")
.contains("OAS 3.1")
})
})