Skip to content

Commit

Permalink
Merge branch 'huhuaaa-feature/fix-enum-empty-bug'
Browse files Browse the repository at this point in the history
  • Loading branch information
epicfaace committed Feb 23, 2019
2 parents f9d4c63 + 5aaf863 commit c355ddb
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/components/widgets/SelectWidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,9 @@ function SelectWidget(props) {
const newValue = getValue(event, multiple);
onChange(processValue(schema, newValue));
}}>
{!multiple && !schema.default && <option value="">{placeholder}</option>}
{!multiple && schema.default === undefined && (
<option value="">{placeholder}</option>
)}
{enumOptions.map(({ value, label }, i) => {
const disabled = enumDisabled && enumDisabled.indexOf(value) != -1;
return (
Expand Down
71 changes: 71 additions & 0 deletions test/NumberField_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -290,5 +290,76 @@ describe("NumberField", () => {

expect(node.querySelector("select").id).eql("root");
});

it("should render a select element with a blank option, when default value is not set.", () => {
const schema = {
type: "object",
properties: {
foo: {
type: "number",
enum: [0],
},
},
};

const { node } = createFormComponent({
schema,
});

const selects = node.querySelectorAll("select");
expect(selects[0].value).eql("");

const options = node.querySelectorAll("option");
expect(options.length).eql(2);
expect(options[0].innerHTML).eql("");
});

it("should render a select element without a blank option, if a default value is set.", () => {
const schema = {
type: "object",
properties: {
foo: {
type: "number",
enum: [2],
default: 2,
},
},
};

const { node } = createFormComponent({
schema,
});

const selects = node.querySelectorAll("select");
expect(selects[0].value).eql("2");

const options = node.querySelectorAll("option");
expect(options.length).eql(1);
expect(options[0].innerHTML).eql("2");
});

it("should render a select element without a blank option, if the default value is 0.", () => {
const schema = {
type: "object",
properties: {
foo: {
type: "number",
enum: [0],
default: 0,
},
},
};

const { node } = createFormComponent({
schema,
});

const selects = node.querySelectorAll("select");
expect(selects[0].value).eql("0");

const options = node.querySelectorAll("option");
expect(options.length).eql(1);
expect(options[0].innerHTML).eql("0");
});
});
});
63 changes: 63 additions & 0 deletions test/StringField_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,69 @@ describe("StringField", () => {

expect(node.querySelector("#custom")).to.exist;
});

it("should render a select element with first option 'false' if the default value is false", () => {
const schema = {
type: "object",
properties: {
foo: {
type: "string",
enum: [false, true],
default: false,
},
},
};

const { node } = createFormComponent({
schema,
});

const options = node.querySelectorAll("option");
expect(options[0].innerHTML).eql("false");
expect(options.length).eql(2);
});

it("should render a select element and the option's length is equal the enum's length, if set the enum and the default value is empty.", () => {
const schema = {
type: "object",
properties: {
foo: {
type: "string",
enum: ["", "1"],
default: "",
},
},
};

const { node } = createFormComponent({
schema,
});

const options = node.querySelectorAll("option");
expect(options[0].innerHTML).eql("");
expect(options.length).eql(2);
});

it("should render only one empty option when the default value is empty.", () => {
const schema = {
type: "object",
properties: {
foo: {
type: "string",
enum: [""],
default: "",
},
},
};

const { node } = createFormComponent({
schema,
});

const options = node.querySelectorAll("option");
expect(options[0].innerHTML).eql("");
expect(options.length).eql(1);
});
});

describe("TextareaWidget", () => {
Expand Down

0 comments on commit c355ddb

Please sign in to comment.