Skip to content

Commit

Permalink
fix(parameter-row): rendering of default/example values of 0 (#6454)
Browse files Browse the repository at this point in the history
Co-authored-by: @danxmoran
  • Loading branch information
tim-lai authored Oct 1, 2020
1 parent db2cca8 commit 797929f
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 10 deletions.
27 changes: 18 additions & 9 deletions src/core/components/parameter-row.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -119,17 +119,26 @@ 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") !== undefined
? paramWithMeta.get("x-example")
: paramWithMeta.getIn(["schema", "example"]) !== undefined
? paramWithMeta.getIn(["schema", "example"])
: (schema && schema.getIn(["default"]))
} 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"]) !== undefined
? paramWithMeta.getIn(["examples", currentExampleKey, "value"])
: paramWithMeta.getIn(["content", parameterMediaType, "example"]) !== undefined
? paramWithMeta.getIn(["content", parameterMediaType, "example"])
: paramWithMeta.get("example") !== undefined
? paramWithMeta.get("example")
: (schema && schema.get("example")) !== undefined
? (schema && schema.get("example"))
: (schema && schema.get("default")) !== undefined
? (schema && schema.get("default"))
: paramWithMeta.get("default") // ensures support for `parameterMacro`
}

//// Process the initial value
Expand Down
141 changes: 140 additions & 1 deletion test/unit/components/parameter-row.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from "react"
import { fromJS } from "immutable"
import { List, fromJS } from "immutable"
import { render } from "enzyme"
import ParameterRow from "components/parameter-row"

Expand Down Expand Up @@ -84,3 +84,142 @@ describe("<ParameterRow/>", () => {
expect(wrapper.find(".parameter__type").text()).toEqual("string")
})
})

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: jest.fn(),
param: paramValue,
rawParam: paramValue,
onChangeConsumes: () => { },
pathMethod: [],
getConfigs: () => { return {} },
specPath: List([])
}

render(<ParameterRow {...props} />)

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: jest.fn(),
param: paramValue,
rawParam: paramValue,
onChangeConsumes: () => { },
pathMethod: [],
getConfigs: () => { return {} },
specPath: List([])
}

render(<ParameterRow {...props} />)

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: jest.fn(),
param: paramValue,
rawParam: paramValue,
onChangeConsumes: () => { },
pathMethod: [],
getConfigs: () => { return {} },
specPath: List([])
}

render(<ParameterRow {...props} />)

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: jest.fn(),
param: paramValue,
rawParam: paramValue,
onChangeConsumes: () => { },
pathMethod: [],
getConfigs: () => { return {} },
specPath: List([])
}

render(<ParameterRow {...props} />)

expect(props.onChange).toHaveBeenCalled()
expect(props.onChange).toHaveBeenCalledWith(paramValue, "0", false)
})
})

0 comments on commit 797929f

Please sign in to comment.