fix: OAS3 array item value input (#4729)
* fix: OAS3 array item value input * linter fixes
This commit is contained in:
@@ -27,20 +27,24 @@ export default class ParameterRow extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentWillReceiveProps(props) {
|
componentWillReceiveProps(props) {
|
||||||
let { specSelectors, pathMethod, param } = props
|
let { specSelectors, pathMethod, rawParam } = props
|
||||||
let { isOAS3 } = specSelectors
|
let { isOAS3 } = specSelectors
|
||||||
|
|
||||||
let example = param.get("example")
|
let example = rawParam.get("example")
|
||||||
let parameter = specSelectors.parameterWithMetaByIdentity(pathMethod, param) || param
|
|
||||||
|
let parameterWithMeta = specSelectors.parameterWithMetaByIdentity(pathMethod, rawParam)
|
||||||
|
// fallback, if the meta lookup fails
|
||||||
|
parameterWithMeta = parameterWithMeta.isEmpty() ? rawParam : parameterWithMeta
|
||||||
|
|
||||||
let enumValue
|
let enumValue
|
||||||
|
|
||||||
if(isOAS3()) {
|
if(isOAS3()) {
|
||||||
let schema = param.get("schema") || Map()
|
let schema = rawParam.get("schema") || Map()
|
||||||
enumValue = schema.get("enum")
|
enumValue = schema.get("enum")
|
||||||
} else {
|
} else {
|
||||||
enumValue = parameter ? parameter.get("enum") : undefined
|
enumValue = parameterWithMeta ? parameterWithMeta.get("enum") : undefined
|
||||||
}
|
}
|
||||||
let paramValue = parameter ? parameter.get("value") : undefined
|
let paramValue = parameterWithMeta ? parameterWithMeta.get("value") : undefined
|
||||||
|
|
||||||
let value
|
let value
|
||||||
|
|
||||||
@@ -48,7 +52,7 @@ export default class ParameterRow extends Component {
|
|||||||
value = paramValue
|
value = paramValue
|
||||||
} else if ( example !== undefined ) {
|
} else if ( example !== undefined ) {
|
||||||
value = example
|
value = example
|
||||||
} else if ( param.get("required") && enumValue && enumValue.size ) {
|
} else if ( rawParam.get("required") && enumValue && enumValue.size ) {
|
||||||
value = enumValue.first()
|
value = enumValue.first()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,20 +67,20 @@ export default class ParameterRow extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setDefaultValue = () => {
|
setDefaultValue = () => {
|
||||||
let { specSelectors, pathMethod, param } = this.props
|
let { specSelectors, pathMethod, rawParam } = this.props
|
||||||
|
|
||||||
if (param.get("value") !== undefined) {
|
if (rawParam.get("value") !== undefined) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let schema = specSelectors.isOAS3() ? param.get("schema", Map({})) : param
|
let schema = specSelectors.isOAS3() ? rawParam.get("schema", Map({})) : rawParam
|
||||||
|
|
||||||
let defaultValue = schema.get("default")
|
let defaultValue = schema.get("default")
|
||||||
let xExampleValue = param.get("x-example") // Swagger 2 only
|
let xExampleValue = rawParam.get("x-example") // Swagger 2 only
|
||||||
let parameter = specSelectors.parameterWithMetaByIdentity(pathMethod, param)
|
let parameter = specSelectors.parameterWithMetaByIdentity(pathMethod, rawParam)
|
||||||
let value = parameter ? parameter.get("value") : ""
|
let value = parameter ? parameter.get("value") : ""
|
||||||
|
|
||||||
if( param.get("in") !== "body" ) {
|
if( rawParam.get("in") !== "body" ) {
|
||||||
if ( xExampleValue !== undefined && value === undefined && specSelectors.isSwagger2() ) {
|
if ( xExampleValue !== undefined && value === undefined && specSelectors.isSwagger2() ) {
|
||||||
this.onChangeWrapper(xExampleValue)
|
this.onChangeWrapper(xExampleValue)
|
||||||
} else if ( defaultValue !== undefined && value === undefined ) {
|
} else if ( defaultValue !== undefined && value === undefined ) {
|
||||||
|
|||||||
44
test/e2e/scenarios/bugs/frozen-array-input.js
Normal file
44
test/e2e/scenarios/bugs/frozen-array-input.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
describe("bug: unable to change array input", function () {
|
||||||
|
let mainPage
|
||||||
|
beforeEach(function (client, done) {
|
||||||
|
mainPage = client
|
||||||
|
.url("localhost:3230")
|
||||||
|
.page.main()
|
||||||
|
|
||||||
|
client.waitForElementVisible(".download-url-input:not([disabled])", 5000)
|
||||||
|
.clearValue(".download-url-input")
|
||||||
|
.setValue(".download-url-input", "/test-specs/bugs/frozen-array-input.yaml")
|
||||||
|
.click("button.download-url-button")
|
||||||
|
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
afterEach(function (client, done) {
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
it("consistently displays a model's name regardless of expansion state", function (client) {
|
||||||
|
client.waitForElementVisible(".opblock-summary-description", 10000)
|
||||||
|
.assert.containsText("span.opblock-summary-path > a > span", "/test")
|
||||||
|
.click("#operations-default-get_test")
|
||||||
|
.pause(500)
|
||||||
|
.click("button.btn.try-out__btn")
|
||||||
|
.elements("css selector", ".json-schema-form-item", function (result) {
|
||||||
|
this.assert.equal(result.value.length, 2, "initial number of array item inputs")
|
||||||
|
})
|
||||||
|
.click(".json-schema-form-item-add")
|
||||||
|
.elements("css selector", ".json-schema-form-item", function (result) {
|
||||||
|
this.assert.equal(result.value.length, 3, "number of array item inputs after clicking add")
|
||||||
|
})
|
||||||
|
.click(".json-schema-form-item-remove")
|
||||||
|
.click(".json-schema-form-item-remove")
|
||||||
|
.click(".json-schema-form-item-remove")
|
||||||
|
.elements("css selector", ".json-schema-form-item", function (result) {
|
||||||
|
this.assert.equal(result.value.length, 0, "number of array item inputs after removing all items")
|
||||||
|
})
|
||||||
|
.click(".json-schema-form-item-add")
|
||||||
|
.setValue(".json-schema-form-item input", "myValue123")
|
||||||
|
.click("button.execute")
|
||||||
|
.pause(100)
|
||||||
|
.assert.containsText(".request-url pre", "http://localhost:3230/test?fields=myValue123")
|
||||||
|
client.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
35
test/e2e/specs/bugs/frozen-array-input.yaml
Normal file
35
test/e2e/specs/bugs/frozen-array-input.yaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
openapi: '3.0.0'
|
||||||
|
info:
|
||||||
|
description: >-
|
||||||
|
Repro API
|
||||||
|
title: Repro API
|
||||||
|
version: '1.0'
|
||||||
|
paths:
|
||||||
|
/test:
|
||||||
|
get:
|
||||||
|
summary: Test get
|
||||||
|
parameters:
|
||||||
|
- name: fields
|
||||||
|
in: query
|
||||||
|
required: false
|
||||||
|
explode: false
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
style: form
|
||||||
|
example:
|
||||||
|
- friends
|
||||||
|
- family
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Success!
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
Reference in New Issue
Block a user