diff --git a/src/core/json-schema-components.jsx b/src/core/json-schema-components.jsx index 4c5556f8..7d881902 100644 --- a/src/core/json-schema-components.jsx +++ b/src/core/json-schema-components.jsx @@ -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 = ()=> {} @@ -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 = () => { @@ -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) } diff --git a/src/core/plugins/oas3/components/request-body.jsx b/src/core/plugins/oas3/components/request-body.jsx index 75be138b..1be1af67 100644 --- a/src/core/plugins/oas3/components/request-body.jsx +++ b/src/core/plugins/oas3/components/request-body.jsx @@ -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") { @@ -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)} /> )} : null } diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index c37345df..1585795c 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -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{ diff --git a/test/e2e-cypress/tests/features/oas3-request-body-allow-empty-values.js b/test/e2e-cypress/tests/features/oas3-request-body-allow-empty-values.js index fe8ec345..325a32d0 100644 --- a/test/e2e-cypress/tests/features/oas3-request-body-allow-empty-values.js +++ b/test/e2e-cypress/tests/features/oas3-request-body-allow-empty-values.js @@ -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() @@ -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() diff --git a/test/e2e-cypress/tests/features/oas3-request-body-required.js b/test/e2e-cypress/tests/features/oas3-request-body-required.js index 3098955a..e32d5264 100644 --- a/test/e2e-cypress/tests/features/oas3-request-body-required.js +++ b/test/e2e-cypress/tests/features/oas3-request-body-required.js @@ -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") diff --git a/test/e2e-cypress/tests/features/schema-form.js b/test/e2e-cypress/tests/features/schema-form.js index 95bef5ec..3f4ca3d1 100644 --- a/test/e2e-cypress/tests/features/schema-form.js +++ b/test/e2e-cypress/tests/features/schema-form.js @@ -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 => { @@ -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 => { @@ -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 => { @@ -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 => { @@ -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 => { @@ -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 => { @@ -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 => { @@ -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 => { @@ -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 => {