diff --git a/src/core/json-schema-components.js b/src/core/json-schema-components.js
index 78ea6962..a1d38771 100644
--- a/src/core/json-schema-components.js
+++ b/src/core/json-schema-components.js
@@ -201,7 +201,7 @@ export class JsonSchema_boolean extends Component {
onEnumChange = (val) => this.props.onChange(val)
render() {
- let { getComponent, value, errors, schema } = this.props
+ let { getComponent, value, errors, schema, required } = this.props
errors = errors.toJS ? errors.toJS() : []
const Select = getComponent("Select")
@@ -210,7 +210,7 @@ export class JsonSchema_boolean extends Component {
title={ errors.length ? errors : ""}
value={ String(value) }
allowedValues={ fromJS(schema.enum || ["true", "false"]) }
- allowEmptyValue={ true }
+ allowEmptyValue={ !schema.enum || !required }
onChange={ this.onEnumChange }/>)
}
}
diff --git a/test/components/json-schema-form.js b/test/components/json-schema-form.js
index 41ba87a5..69d00369 100644
--- a/test/components/json-schema-form.js
+++ b/test/components/json-schema-form.js
@@ -86,6 +86,54 @@ describe("", function(){
expect(wrapper.find("select option").eq(2).text()).toEqual("false")
})
+
+ it("should render the correct options for an enum boolean parameter", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ schema: {
+ type: "boolean",
+ enum: ["true"]
+ }
+ }
+
+ let wrapper = render()
+
+ expect(wrapper.find("select").length).toEqual(1)
+ expect(wrapper.find("select option").length).toEqual(2)
+ expect(wrapper.find("select option").eq(0).text()).toEqual("--")
+ expect(wrapper.find("select option").eq(1).text()).toEqual("true")
+ expect(wrapper.find("select option:checked").first().text()).toEqual("--")
+ })
+
+ it("should render the correct options for a required boolean parameter", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ schema: {
+ type: "boolean",
+ required: true
+ }
+ }
+
+ let wrapper = render()
+
+ expect(wrapper.find("select").length).toEqual(1)
+ expect(wrapper.find("select option").length).toEqual(3)
+ expect(wrapper.find("select option").eq(0).text()).toEqual("--")
+ expect(wrapper.find("select option").eq(1).text()).toEqual("true")
+ expect(wrapper.find("select option").eq(2).text()).toEqual("false")
+ expect(wrapper.find("select option:checked").first().text()).toEqual("--")
+ })
+
it("should render the correct options for a required enum boolean parameter", function(){
let props = {
@@ -105,7 +153,8 @@ describe("", function(){
expect(wrapper.find("select").length).toEqual(1)
expect(wrapper.find("select option").length).toEqual(1)
- expect(wrapper.find("select option").first().text()).toEqual("true")
+ expect(wrapper.find("select option").eq(0).text()).toEqual("true")
+ expect(wrapper.find("select option:checked").first().text()).toEqual("true")
})
})
describe("objects", function() {