diff --git a/src/core/components/parameter-row.jsx b/src/core/components/parameter-row.jsx
index 1b10834a..ae12fae9 100644
--- a/src/core/components/parameter-row.jsx
+++ b/src/core/components/parameter-row.jsx
@@ -22,20 +22,7 @@ export default class ParameterRow extends Component {
constructor(props, context) {
super(props, context)
- let { specSelectors, pathMethod, param } = props
- let defaultValue = param.get("default")
- let xExampleValue = param.get("x-example")
- let parameter = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in"))
- let value = parameter ? parameter.get("value") : ""
-
- if( param.get("in") !== "body" ) {
- if ( xExampleValue !== undefined && value === undefined && specSelectors.isSwagger2() ) {
- this.onChangeWrapper(xExampleValue)
- } else if ( defaultValue !== undefined && value === undefined ) {
- this.onChangeWrapper(defaultValue)
- }
- }
-
+ this.setDefaultValue()
}
componentWillReceiveProps(props) {
@@ -43,7 +30,6 @@ export default class ParameterRow extends Component {
let { isOAS3 } = specSelectors
let example = param.get("example")
- let defaultValue = param.get("default")
let parameter = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in"))
let enumValue
@@ -61,8 +47,6 @@ export default class ParameterRow extends Component {
value = paramValue
} else if ( example !== undefined ) {
value = example
- } else if ( defaultValue !== undefined) {
- value = defaultValue
} else if ( param.get("required") && enumValue && enumValue.size ) {
value = enumValue.first()
}
@@ -77,6 +61,29 @@ export default class ParameterRow extends Component {
return onChange(param, value)
}
+ setDefaultValue = () => {
+ let { specSelectors, pathMethod, param } = this.props
+
+ if (param.get("value") !== undefined) {
+ return
+ }
+
+ let schema = specSelectors.isOAS3() ? param.get("schema", Map({})) : param
+
+ let defaultValue = schema.get("default")
+ let xExampleValue = param.get("x-example") // Swagger 2 only
+ let parameter = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in"))
+ let value = parameter ? parameter.get("value") : ""
+
+ if( param.get("in") !== "body" ) {
+ if ( xExampleValue !== undefined && value === undefined && specSelectors.isSwagger2() ) {
+ this.onChangeWrapper(xExampleValue)
+ } else if ( defaultValue !== undefined && value === undefined ) {
+ this.onChangeWrapper(defaultValue)
+ }
+ }
+ }
+
render() {
let {param, onChange, getComponent, getConfigs, isExecute, fn, onChangeConsumes, specSelectors, pathMethod, specPath} = this.props
diff --git a/test/bugs/4557-default-parameter-values.js b/test/bugs/4557-default-parameter-values.js
new file mode 100644
index 00000000..20514678
--- /dev/null
+++ b/test/bugs/4557-default-parameter-values.js
@@ -0,0 +1,67 @@
+/* eslint-env mocha */
+import React from "react"
+import { List, fromJS } from "immutable"
+import expect, { createSpy } from "expect"
+import { render } from "enzyme"
+import ParameterRow from "components/parameter-row"
+
+describe("bug #4557: default parameter values", function(){
+ it("should apply a Swagger 2.0 default value", function(){
+
+ const paramValue = fromJS({
+ description: "a pet",
+ type: "string",
+ default: "MyDefaultValue"
+ })
+
+ let props = {
+ getComponent: ()=> "div",
+ specSelectors: {
+ security(){},
+ parameterWithMeta(){ return paramValue },
+ isOAS3(){ return false }
+ },
+ operation: {get: ()=>{}},
+ onChange: createSpy(),
+ param: paramValue,
+ onChangeConsumes: () => {},
+ pathMethod: [],
+ getConfigs: () => { return {} },
+ specPath: List([])
+ }
+
+ render()
+
+ expect(props.onChange).toHaveBeenCalledWith(paramValue, "MyDefaultValue")
+ })
+ it("should apply an OpenAPI 3.0 default value", function(){
+
+ const paramValue = fromJS({
+ description: "a pet",
+ schema: {
+ type: "string",
+ default: "MyDefaultValue"
+ }
+ })
+
+ let props = {
+ getComponent: ()=> "div",
+ specSelectors: {
+ security(){},
+ parameterWithMeta(){ return paramValue },
+ isOAS3(){ return true }
+ },
+ operation: {get: ()=>{}},
+ onChange: createSpy(),
+ param: paramValue,
+ onChangeConsumes: () => {},
+ pathMethod: [],
+ getConfigs: () => { return {} },
+ specPath: List([])
+ }
+
+ render()
+
+ expect(props.onChange).toHaveBeenCalledWith(paramValue, "MyDefaultValue")
+ })
+})