diff --git a/src/core/plugins/oas3/components/request-body.jsx b/src/core/plugins/oas3/components/request-body.jsx index fba93741fcb..7f6b07308e7 100644 --- a/src/core/plugins/oas3/components/request-body.jsx +++ b/src/core/plugins/oas3/components/request-body.jsx @@ -107,18 +107,22 @@ const RequestBody = ({ } const isObjectContent = mediaTypeValue.getIn(["schema", "type"]) === "object" + const isBinaryFormat = mediaTypeValue.getIn(["schema", "format"]) === "binary" + const isBase64Format = mediaTypeValue.getIn(["schema", "format"]) === "base64" if( contentType === "application/octet-stream" || contentType.indexOf("image/") === 0 || contentType.indexOf("audio/") === 0 || contentType.indexOf("video/") === 0 + || isBinaryFormat + || isBase64Format ) { const Input = getComponent("Input") if(!isExecute) { return - Example values are not available for application/octet-stream media types. + Example values are not available for {contentType} media types. } @@ -163,7 +167,7 @@ const RequestBody = ({ || prop.hasIn(["items", "default"]) const useInitialValFromEnum = prop.has("enum") && (prop.get("enum").size === 1 || required) const useInitialValue = useInitialValFromSchemaSamples || useInitialValFromEnum - + let initialValue = "" if (type === "array" && !useInitialValue) { initialValue = [] diff --git a/test/e2e-cypress/static/documents/features/request-body-upload-file.yaml b/test/e2e-cypress/static/documents/features/request-body-upload-file.yaml new file mode 100644 index 00000000000..ec5d27771a4 --- /dev/null +++ b/test/e2e-cypress/static/documents/features/request-body-upload-file.yaml @@ -0,0 +1,105 @@ +openapi: 3.0.0 +info: + title: "Request body file upload" + description: |- + This document has examples for examining the `schema` or content type for request bodies requiring a file upload + * `application/octect-stream` content type (no matter what schema format) + * `audio/*` content type (no matter what schema format) + * `image/*` content type (no matter what schema format) + * `video/*` content type (no matter what schema format) + * schema format is `base64` (no matter what content type) + * schema format is `binary` (no matter what content type) + version: "1.0.0" +paths: + /upload-application-octet-stream: + post: + operationId: uploadApplicationOctetStream + requestBody: + content: + application/octet-stream: + schema: + type: string + responses: + '200': + description: successful operation + content: + text/plain: + schema: + type: string + /upload-image-png: + post: + operationId: uploadImagePng + requestBody: + content: + image/png: + schema: + type: string + responses: + '200': + description: successful operation + content: + text/plain: + schema: + type: string + /upload-audio-wav: + post: + operationId: uploadAudioWav + requestBody: + content: + audio/wav: + schema: + type: string + responses: + '200': + description: successful operation + content: + text/plain: + schema: + type: string + /upload-video-mpeg: + post: + operationId: uploadVideoMpeg + requestBody: + content: + video/mpeg: + schema: + type: string + responses: + '200': + description: successful operation + content: + text/plain: + schema: + type: string + /upload-schema-format-binary: + post: + operationId: uploadSchemaFormatBinary + requestBody: + content: + application/x-custom: + schema: + type: string + format: binary + responses: + '200': + description: successful operation + content: + text/plain: + schema: + type: string + /upload-schema-format-base64: + post: + operationId: uploadSchemaFormatBase64 + requestBody: + content: + application/x-custom: + schema: + type: string + format: base64 + responses: + '200': + description: successful operation + content: + text/plain: + schema: + type: string diff --git a/test/e2e-cypress/tests/features/request-body-upload-file.js b/test/e2e-cypress/tests/features/request-body-upload-file.js new file mode 100644 index 00000000000..09b15651531 --- /dev/null +++ b/test/e2e-cypress/tests/features/request-body-upload-file.js @@ -0,0 +1,114 @@ +/** + * @prettier + */ + +describe("OpenAPI 3.0 Request Body upload file button", () => { + describe("application/octet-stream", () => { + it("should display description with the correct content type", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadApplicationOctetStream") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper i") + .should("have.text", "Example values are not available for application/octet-stream media types.") + }) + it("should display a file upload button", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadApplicationOctetStream") + .click() + .get(".try-out__btn") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper input") + .should("have.prop", "type", "file") + }) + }) + describe("image/png", () => { + it("should display description with the correct content type", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadImagePng") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper i") + .should("have.text", "Example values are not available for image/png media types.") + }) + it("should display a file upload button", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadApplicationOctetStream") + .click() + .get(".try-out__btn") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper input") + .should("have.prop", "type", "file") + }) + }) + describe("audio/wav", () => { + it("should display description with the correct content type", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadAudioWav") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper i") + .should("have.text", "Example values are not available for audio/wav media types.") + }) + it("should display a file upload button", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadApplicationOctetStream") + .click() + .get(".try-out__btn") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper input") + .should("have.prop", "type", "file") + }) + }) + describe("video/mpeg", () => { + it("should display description with the correct content type", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadVideoMpeg") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper i") + .should("have.text", "Example values are not available for video/mpeg media types.") + }) + it("should display a file upload button", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadApplicationOctetStream") + .click() + .get(".try-out__btn") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper input") + .should("have.prop", "type", "file") + }) + }) + describe("schema format binary", () => { + it("should display description with the correct content type", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadSchemaFormatBinary") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper i") + .should("have.text", "Example values are not available for application/x-custom media types.") + }) + it("should display a file upload button", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadSchemaFormatBinary") + .click() + .get(".try-out__btn") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper input") + .should("have.prop", "type", "file") + }) + }) + describe("schema format base64", () => { + it("should display description with the correct content type", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadSchemaFormatBase64") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper i") + .should("have.text", "Example values are not available for application/x-custom media types.") + }) + it("should display a file upload button", () => { + cy.visit("/?url=/documents/features/request-body-upload-file.yaml") + .get("#operations-default-uploadSchemaFormatBinary") + .click() + .get(".try-out__btn") + .click() + .get(".opblock-section-request-body .opblock-description-wrapper input") + .should("have.prop", "type", "file") + }) + }) +})