fix: multipart array sample generation for items (#6461)

* json schema array component should use schema to generate example in case of array items.
* empty value checkbox should be disabled if not empty => not empty list || not empty string
* curl should also check for not empty list
This commit is contained in:
Mahtis Michel
2020-10-08 01:59:29 +02:00
committed by GitHub
parent deeff4b42c
commit f4bdf2f953
6 changed files with 35 additions and 19 deletions

View File

@@ -4,7 +4,7 @@ import { List, fromJS } from "immutable"
import cx from "classnames" import cx from "classnames"
import ImPropTypes from "react-immutable-proptypes" import ImPropTypes from "react-immutable-proptypes"
import DebounceInput from "react-debounce-input" import DebounceInput from "react-debounce-input"
import { stringify } from "core/utils" import { stringify, getSampleSchema } from "core/utils"
//import "less/json-schema-form" //import "less/json-schema-form"
const noop = ()=> {} const noop = ()=> {}
@@ -125,12 +125,15 @@ export class JsonSchema_array extends PureComponent {
constructor(props, context) { constructor(props, context) {
super(props, context) super(props, context)
this.state = { value: valueOrEmptyList(props.value) } this.state = { value: valueOrEmptyList(props.value), schema: props.schema}
} }
componentWillReceiveProps(props) { componentWillReceiveProps(props) {
if(props.value !== this.state.value) if(props.value !== this.state.value)
this.setState({ value: props.value }) this.setState({ value: props.value })
if(props.schema !== this.state.schema)
this.setState({ schema: props.schema })
} }
onChange = () => { onChange = () => {
@@ -152,7 +155,9 @@ export class JsonSchema_array extends PureComponent {
addItem = () => { addItem = () => {
let newValue = valueOrEmptyList(this.state.value) let newValue = valueOrEmptyList(this.state.value)
this.setState(() => ({ this.setState(() => ({
value: newValue.push("") value: newValue.push(getSampleSchema(this.state.schema.get("items"), false, {
includeWriteOnly: true
}))
}), this.onChange) }), this.onChange)
} }

View File

@@ -145,10 +145,14 @@ const RequestBody = ({
let initialValue = prop.get("default") || prop.get("example") || "" let initialValue = prop.get("default") || prop.get("example") || ""
if (initialValue === "" && type === "object") { if (initialValue === "") {
if(type === "object") {
initialValue = getSampleSchema(prop, false, { initialValue = getSampleSchema(prop, false, {
includeWriteOnly: true includeWriteOnly: true
}) })
} else if(type === "array") {
initialValue = []
}
} }
if (typeof initialValue !== "string" && type === "object") { if (typeof initialValue !== "string" && type === "object") {
@@ -193,7 +197,7 @@ const RequestBody = ({
onChange={(value) => onChangeIncludeEmpty(key, value)} onChange={(value) => onChangeIncludeEmpty(key, value)}
isIncluded={requestBodyInclusionSetting.get(key) || false} isIncluded={requestBodyInclusionSetting.get(key) || false}
isIncludedOptions={setIsIncludedOptions(key)} isIncludedOptions={setIsIncludedOptions(key)}
isDisabled={!isEmptyValue(currentValue)} isDisabled={Array.isArray(currentValue) ? currentValue.length !== 0 : !isEmptyValue(currentValue)}
/> />
)} )}
</div> : null } </div> : null }

View File

@@ -416,7 +416,10 @@ export const executeRequest = (req) =>
} }
) )
.filter( .filter(
(value, key) => !isEmptyValue(value) || requestBodyInclusionSetting.get(key) (value, key) => (Array.isArray(value)
? value.length !== 0
: !isEmptyValue(value)
) || requestBodyInclusionSetting.get(key)
) )
.toJS() .toJS()
} else{ } else{

View File

@@ -97,6 +97,8 @@ describe("OpenAPI 3.0 Allow Empty Values in Request Body", () => {
// add item to pass required validation // add item to pass required validation
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description button") .get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description button")
.click() .click()
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) input")
.clear()
// Execute // Execute
.get(".execute.opblock-control__btn") .get(".execute.opblock-control__btn")
.click() .click()
@@ -127,6 +129,8 @@ describe("OpenAPI 3.0 Allow Empty Values in Request Body", () => {
// add item to pass required validation // add item to pass required validation
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description button") .get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description button")
.click() .click()
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) input")
.clear()
// Execute // Execute
.get(".execute.opblock-control__btn") .get(".execute.opblock-control__btn")
.click() .click()

View File

@@ -149,7 +149,7 @@ describe("OpenAPI 3.0 Validation for Required Request Body and Request Body Fiel
.should("have.value", "doggie") .should("have.value", "doggie")
.should("not.have.class", "invalid") .should("not.have.class", "invalid")
.get(".opblock-body .opblock-section .opblock-section-request-body .parameters:nth-child(4) > .parameters-col_description input") .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") .should("not.have.class", "invalid")
// cURL component should exist // cURL component should exist
.get(".responses-wrapper .curl-command") .get(".responses-wrapper .curl-command")

View File

@@ -305,7 +305,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.type("spotted") .type("{selectall}spotted")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -327,7 +327,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("spotted") .type("{selectall}spotted")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -354,7 +354,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("spotted") .type("{selectall}spotted")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -366,7 +366,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("large") .type("{selectall}large")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -379,7 +379,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("puppy") .type("{selectall}puppy")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -454,7 +454,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.type("spotted") .type("{selectall}spotted")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -485,7 +485,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("spotted") .type("{selectall}spotted")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -497,7 +497,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("large") .type("{selectall}large")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {
@@ -510,7 +510,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add") .get(".json-schema-form-item-add")
.click() .click()
.get(".json-schema-form-item:last-of-type > input") .get(".json-schema-form-item:last-of-type > input")
.type("puppy") .type("{selectall}puppy")
// Assert against the input fields // Assert against the input fields
.get(".json-schema-form-item > input") .get(".json-schema-form-item > input")
.then(inputs => { .then(inputs => {