Skip to content

Commit 0aefe3c

Browse files
authored
Merge pull request #107 from Dhalton/disabled-radio-button-click
fix: 🐛 don't fire events when clicking disabled radio button
2 parents 68af355 + 033048e commit 0aefe3c

File tree

2 files changed

+66
-10
lines changed

2 files changed

+66
-10
lines changed

__tests__/click.js

+56
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,62 @@ describe("userEvent.click", () => {
9292
expect(getByTestId("element")).toHaveProperty("checked", false);
9393
});
9494

95+
it('should fire the correct events for <input type="radio">', () => {
96+
const events = [];
97+
const eventsHandler = jest.fn(evt => events.push(evt.type));
98+
const { getByTestId } = render(
99+
<input
100+
data-testid="element"
101+
type="radio"
102+
onMouseOver={eventsHandler}
103+
onMouseMove={eventsHandler}
104+
onMouseDown={eventsHandler}
105+
onFocus={eventsHandler}
106+
onMouseUp={eventsHandler}
107+
onClick={eventsHandler}
108+
onChange={eventsHandler}
109+
/>
110+
);
111+
112+
userEvent.click(getByTestId("element"));
113+
114+
expect(events).toEqual([
115+
"mouseover",
116+
"mousemove",
117+
"mousedown",
118+
"mouseup",
119+
"click",
120+
"change"
121+
]);
122+
123+
expect(getByTestId("element")).toHaveProperty("checked", true);
124+
});
125+
126+
it('should fire the correct events for <input type="radio" disabled>', () => {
127+
const events = [];
128+
const eventsHandler = jest.fn(evt => events.push(evt.type));
129+
const { getByTestId } = render(
130+
<input
131+
data-testid="element"
132+
type="radio"
133+
onMouseOver={eventsHandler}
134+
onMouseMove={eventsHandler}
135+
onMouseDown={eventsHandler}
136+
onFocus={eventsHandler}
137+
onMouseUp={eventsHandler}
138+
onClick={eventsHandler}
139+
onChange={eventsHandler}
140+
disabled
141+
/>
142+
);
143+
144+
userEvent.click(getByTestId("element"));
145+
146+
expect(events).toEqual([]);
147+
148+
expect(getByTestId("element")).toHaveProperty("checked", false);
149+
});
150+
95151
it("should fire the correct events for <div>", () => {
96152
const events = [];
97153
const eventsHandler = jest.fn(evt => events.push(evt.type));

src/index.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ function clickLabel(label) {
3030
}
3131
}
3232

33-
function clickCheckbox(checkbox) {
34-
if (checkbox.disabled) return;
33+
function clickBooleanElement(element) {
34+
if (element.disabled) return;
3535

36-
fireEvent.mouseOver(checkbox);
37-
fireEvent.mouseMove(checkbox);
38-
fireEvent.mouseDown(checkbox);
39-
fireEvent.mouseUp(checkbox);
40-
fireEvent.click(checkbox);
41-
fireEvent.change(checkbox);
36+
fireEvent.mouseOver(element);
37+
fireEvent.mouseMove(element);
38+
fireEvent.mouseDown(element);
39+
fireEvent.mouseUp(element);
40+
fireEvent.click(element);
41+
fireEvent.change(element);
4242
}
4343

4444
function clickElement(element) {
@@ -97,8 +97,8 @@ const userEvent = {
9797
clickLabel(element);
9898
break;
9999
case "INPUT":
100-
if (element.type === "checkbox") {
101-
clickCheckbox(element);
100+
if (element.type === "checkbox" || element.type === "radio") {
101+
clickBooleanElement(element);
102102
break;
103103
}
104104
default:

0 commit comments

Comments
 (0)