Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix multipart array sample generation for items. #6461

Merged
merged 9 commits into from
Oct 7, 2020
11 changes: 8 additions & 3 deletions src/core/json-schema-components.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { List, fromJS } from "immutable"
import cx from "classnames"
import ImPropTypes from "react-immutable-proptypes"
import DebounceInput from "react-debounce-input"
import { stringify } from "core/utils"
import { stringify, getSampleSchema } from "core/utils"
//import "less/json-schema-form"

const noop = ()=> {}
Expand Down Expand Up @@ -125,12 +125,15 @@ export class JsonSchema_array extends PureComponent {

constructor(props, context) {
super(props, context)
this.state = { value: valueOrEmptyList(props.value) }
this.state = { value: valueOrEmptyList(props.value), schema: props.schema}
}

componentWillReceiveProps(props) {
if(props.value !== this.state.value)
this.setState({ value: props.value })

if(props.schema !== this.state.schema)
this.setState({ schema: props.schema })
}

onChange = () => {
Expand All @@ -152,7 +155,9 @@ export class JsonSchema_array extends PureComponent {
addItem = () => {
let newValue = valueOrEmptyList(this.state.value)
this.setState(() => ({
value: newValue.push("")
value: newValue.push(getSampleSchema(this.state.schema.get("items"), false, {
includeWriteOnly: true
}))
}), this.onChange)
}

Expand Down
14 changes: 9 additions & 5 deletions src/core/plugins/oas3/components/request-body.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -145,10 +145,14 @@ const RequestBody = ({

let initialValue = prop.get("default") || prop.get("example") || ""

if (initialValue === "" && type === "object") {
initialValue = getSampleSchema(prop, false, {
includeWriteOnly: true
})
if (initialValue === "") {
if(type === "object") {
initialValue = getSampleSchema(prop, false, {
includeWriteOnly: true
})
} else if(type === "array") {
initialValue = []
}
}

if (typeof initialValue !== "string" && type === "object") {
Expand Down Expand Up @@ -193,7 +197,7 @@ const RequestBody = ({
onChange={(value) => onChangeIncludeEmpty(key, value)}
isIncluded={requestBodyInclusionSetting.get(key) || false}
isIncludedOptions={setIsIncludedOptions(key)}
isDisabled={!isEmptyValue(currentValue)}
isDisabled={Array.isArray(currentValue) ? currentValue.length !== 0 : !isEmptyValue(currentValue)}
/>
)}
</div> : null }
Expand Down
5 changes: 4 additions & 1 deletion src/core/plugins/spec/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,10 @@ export const executeRequest = (req) =>
}
)
.filter(
(value, key) => !isEmptyValue(value) || requestBodyInclusionSetting.get(key)
(value, key) => (Array.isArray(value)
? value.length !== 0
: !isEmptyValue(value)
) || requestBodyInclusionSetting.get(key)
)
.toJS()
} else{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ describe("OpenAPI 3.0 Allow Empty Values in Request Body", () => {
// add item to pass required validation
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description button")
.click()
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) input")
.clear()
// Execute
.get(".execute.opblock-control__btn")
.click()
Expand Down Expand Up @@ -127,6 +129,8 @@ describe("OpenAPI 3.0 Allow Empty Values in Request Body", () => {
// add item to pass required validation
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description button")
.click()
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) input")
.clear()
// Execute
.get(".execute.opblock-control__btn")
.click()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ describe("OpenAPI 3.0 Validation for Required Request Body and Request Body Fiel
.should("have.value", "doggie")
.should("not.have.class", "invalid")
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description input")
.should("have.value", "")
.should("have.value", "string")
.should("not.have.class", "invalid")
// cURL component should exist
.get(".responses-wrapper .curl-command")
Expand Down
18 changes: 9 additions & 9 deletions test/e2e-cypress/tests/features/schema-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > input")
.type("spotted")
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand All @@ -327,7 +327,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("spotted")
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand All @@ -354,7 +354,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("spotted")
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand All @@ -366,7 +366,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("large")
.type("{selectall}large")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand All @@ -379,7 +379,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("puppy")
.type("{selectall}puppy")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand Down Expand Up @@ -454,7 +454,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > input")
.type("spotted")
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand Down Expand Up @@ -485,7 +485,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("spotted")
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand All @@ -497,7 +497,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("large")
.type("{selectall}large")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand All @@ -510,7 +510,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("puppy")
.type("{selectall}puppy")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
Expand Down