Skip to content

Commit

Permalink
fix: multipart enum initial value not set (#7004)
Browse files Browse the repository at this point in the history
  • Loading branch information
mathis-m committed Mar 3, 2021
1 parent d32bd1a commit 68bd61a
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 6 deletions.
13 changes: 10 additions & 3 deletions src/core/plugins/oas3/components/request-body.jsx
Expand Up @@ -155,11 +155,18 @@ const RequestBody = ({
const currentValue = requestBodyValue.getIn([key, "value"])
const currentErrors = requestBodyValue.getIn([key, "errors"]) || requestBodyErrors
const included = requestBodyInclusionSetting.get(key) || false
let hasNonEmptyInitialVal = prop.has("default") || prop.has("example") || prop.hasIn(["items", "example"]) || prop.hasIn(["items", "default"]) || prop.has("enum") && prop.get("enum").size === 1

const useInitialValFromSchemaSamples = prop.has("default")
|| prop.has("example")
|| prop.hasIn(["items", "example"])
|| prop.hasIn(["items", "default"])
const useInitialValFromEnum = prop.has("enum") && (prop.get("enum").size === 1 || required)
const useInitialValue = useInitialValFromSchemaSamples || useInitialValFromEnum

let initialValue = ""
if(type === "array" && !hasNonEmptyInitialVal) {
if(type === "array" && !useInitialValue) {
initialValue = []
} else if (hasNonEmptyInitialVal) {
} else if (useInitialValue) {
// TODO: what about example or examples from requestBody could be passed as exampleOverride
initialValue = getSampleSchema(prop, false, {
includeWriteOnly: true
Expand Down
@@ -0,0 +1,29 @@
openapi: 3.0.3
info:
title: asd
version: 0.0.1
paths:
/test:
post:
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/TestBody'
responses:
200:
description: ok
components:
schemas:
TestBody:
required:
- test_enum
type: object
properties:
test_enum:
allOf:
- $ref: "#/components/schemas/TestEnum"
TestEnum:
enum:
- A
- B
@@ -1,12 +1,16 @@
const getRequestBodyFromCY = (page = null) =>
(page || cy.visit(
function getExpandedTryout(page = null, operationId = "#operations-pet-addPet") {
return (page || cy.visit(
"/?url=/documents/features/petstore-only-pet.openapi.yaml",
))
.get("#operations-pet-addPet")
.get(operationId)
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
}

const getRequestBodyFromCY = (page = null, operationId = "#operations-pet-addPet") =>
getExpandedTryout(page, operationId)
// get textarea
.get(".opblock-body .opblock-section .opblock-section-request-body .body-param textarea")

Expand Down Expand Up @@ -84,4 +88,19 @@ describe("OAS3 Request Body user edit flows", () => {
})
})
})
describe("multipart/", () => {
// Case: User wants to execute operation with media-type multipart/ with a enum property. The user expects the first enum value to be used when execuded.
it("should use the first enum value on execute if not changed by user (#6976)", () => {
// test/e2e-cypress/static/documents/features/request-body/multipart/enum.yaml
getExpandedTryout(
cy.visit(
"/?url=/documents/features/request-body/multipart/enum.yaml",
), "#operations-default-post_test")
.get(".execute")
.click()
// Assert on the request URL
.get(".curl")
.contains("test_enum=A")
})
})
})

0 comments on commit 68bd61a

Please sign in to comment.