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) + }) +})