diff --git a/src/core/components/parameter-row.jsx b/src/core/components/parameter-row.jsx
index dae0aece468..314b229c514 100644
--- a/src/core/components/parameter-row.jsx
+++ b/src/core/components/parameter-row.jsx
@@ -119,17 +119,21 @@ export default class ParameterRow extends Component {
//// Find an initial value
if (specSelectors.isSwagger2()) {
- initialValue = paramWithMeta.get("x-example")
- || paramWithMeta.getIn(["schema", "example"])
- || (schema && schema.getIn(["default"]))
+ initialValue = [
+ paramWithMeta.get("x-example"),
+ paramWithMeta.getIn(["schema", "example"]),
+ schema.getIn(["default"])
+ ].find(v => v !== undefined)
} else if (specSelectors.isOAS3()) {
const currentExampleKey = oas3Selectors.activeExamplesMember(...pathMethod, "parameters", this.getParamKey())
- initialValue = paramWithMeta.getIn(["examples", currentExampleKey, "value"])
- || paramWithMeta.getIn(["content", parameterMediaType, "example"])
- || paramWithMeta.get("example")
- || (schema && schema.get("example"))
- || (schema && schema.get("default"))
- || paramWithMeta.get("default") // ensures support for `parameterMacro`
+ initialValue = [
+ paramWithMeta.getIn(["examples", currentExampleKey, "value"]),
+ paramWithMeta.getIn(["content", parameterMediaType, "example"]),
+ paramWithMeta.get("example"),
+ schema.get("example"),
+ schema.get("default"),
+ paramWithMeta.get("default") // ensures support for `parameterMacro`
+ ].find(v => v !== undefined)
}
//// Process the initial value
diff --git a/test/mocha/bugs/5573-zero-default-example-values.jsx b/test/mocha/bugs/5573-zero-default-example-values.jsx
new file mode 100644
index 00000000000..d45b24df232
--- /dev/null
+++ b/test/mocha/bugs/5573-zero-default-example-values.jsx
@@ -0,0 +1,145 @@
+/* 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 #5573: zero default and example values", function(){
+ it("should apply a Swagger 2.0 default value of zero", function(){
+ const paramValue = fromJS({
+ description: "a pet",
+ type: "integer",
+ default: 0
+ })
+
+ let props = {
+ getComponent: ()=> "div",
+ specSelectors: {
+ security(){},
+ parameterWithMetaByIdentity(){ return paramValue },
+ isOAS3(){ return false },
+ isSwagger2(){ return true }
+ },
+ fn: {},
+ operation: {get: ()=>{}},
+ onChange: createSpy(),
+ param: paramValue,
+ rawParam: paramValue,
+ onChangeConsumes: () => {},
+ pathMethod: [],
+ getConfigs: () => { return {} },
+ specPath: List([])
+ }
+
+ render()
+
+ expect(props.onChange).toHaveBeenCalled()
+ expect(props.onChange).toHaveBeenCalledWith(paramValue, "0", false)
+ })
+ it("should apply a Swagger 2.0 example value of zero", function() {
+ const paramValue = fromJS({
+ description: "a pet",
+ type: "integer",
+ schema: {
+ example: 0
+ }
+ })
+
+ let props = {
+ getComponent: ()=> "div",
+ specSelectors: {
+ security(){},
+ parameterWithMetaByIdentity(){ return paramValue },
+ isOAS3(){ return false },
+ isSwagger2(){ return true }
+ },
+ fn: {},
+ operation: {get: ()=>{}},
+ onChange: createSpy(),
+ param: paramValue,
+ rawParam: paramValue,
+ onChangeConsumes: () => {},
+ pathMethod: [],
+ getConfigs: () => { return {} },
+ specPath: List([])
+ }
+
+ render()
+
+ expect(props.onChange).toHaveBeenCalled()
+ expect(props.onChange).toHaveBeenCalledWith(paramValue, "0", false)
+ })
+ it("should apply an OpenAPI 3.0 default value of zero", function(){
+ const paramValue = fromJS({
+ description: "a pet",
+ schema: {
+ type: "integer",
+ default: 0
+ }
+ })
+
+ let props = {
+ getComponent: ()=> "div",
+ specSelectors: {
+ security(){},
+ parameterWithMetaByIdentity(){ return paramValue },
+ isOAS3(){ return true },
+ isSwagger2() { return false }
+ },
+ oas3Selectors: {
+ activeExamplesMember: () => null
+ },
+ fn: {},
+ operation: {get: ()=>{}},
+ onChange: createSpy(),
+ param: paramValue,
+ rawParam: paramValue,
+ onChangeConsumes: () => {},
+ pathMethod: [],
+ getConfigs: () => { return {} },
+ specPath: List([])
+ }
+
+ render()
+
+ expect(props.onChange).toHaveBeenCalled()
+ expect(props.onChange).toHaveBeenCalledWith(paramValue, "0", false)
+ })
+ it("should apply an OpenAPI 3.0 example value of zero", function() {
+ const paramValue = fromJS({
+ description: "a pet",
+ schema: {
+ type: "integer",
+ example: 0
+ }
+ })
+
+ let props = {
+ getComponent: ()=> "div",
+ specSelectors: {
+ security(){},
+ parameterWithMetaByIdentity(){ return paramValue },
+ isOAS3(){ return true },
+ isSwagger2() { return false }
+ },
+ oas3Selectors: {
+ activeExamplesMember: () => null
+ },
+ fn: {},
+ operation: {get: ()=>{}},
+ onChange: createSpy(),
+ param: paramValue,
+ rawParam: paramValue,
+ onChangeConsumes: () => {},
+ pathMethod: [],
+ getConfigs: () => { return {} },
+ specPath: List([])
+ }
+
+ render()
+
+ expect(props.onChange).toHaveBeenCalled()
+ expect(props.onChange).toHaveBeenCalledWith(paramValue, "0", false)
+ })
+})