monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
116 lines (98 loc) • 3.5 kB
JavaScript
import React from "react";
import userEvent from "@testing-library/user-event";
import { render, cleanup } from "@testing-library/react";
import Toggle from "../Toggle";
describe("Toggle tests", () => {
const formName = "myForm";
const toggleRole = "switch";
describe("Default selected mode", () => {
afterEach(() => {
cleanup();
});
it("should change state to off when is default selected and clicked", () => {
const { getByRole } = render(
<form name={formName}>
<Toggle isDefaultSelected ariaLabel="My Toggle" />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(toggle.checked).toBeFalsy();
});
it("should change state to on when is default not selected and clicked", () => {
const { getByRole } = render(
<form name={formName}>
<Toggle isDefaultSelected={false} ariaLabel="My Toggle" />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(toggle.checked).toBeTruthy();
});
it("should not change state when disabled, default selected and clicked", () => {
const { getByRole } = render(
<form name={formName}>
<Toggle disabled isDefaultSelected ariaLabel="My Toggle" />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(toggle.checked).toBeTruthy();
});
it("should click on toggle trigger on change event with the right parameters", () => {
const onClickMock = jest.fn();
const { getByRole } = render(
<form name={formName}>
<Toggle isDefaultSelected onChange={onClickMock} />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(onClickMock).toHaveBeenCalledWith(false, expect.anything());
});
});
it("should click on toggle trigger on change event with the right parameters - controlerd state", () => {
const onClickMock = jest.fn();
const { getByRole } = render(
<form name={formName}>
<Toggle isSelected onChange={onClickMock} />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(onClickMock).toHaveBeenCalledWith(false, expect.anything());
});
describe("a11y", () => {
it("should add the aria label", () => {
const ariaLabel = "Lable Name";
const { getByLabelText } = render(<Toggle ariaLabel={ariaLabel} />);
const toggleComponent = getByLabelText(ariaLabel);
expect(toggleComponent).toBeTruthy();
});
});
describe("Is selected mode", () => {
afterEach(() => {
cleanup();
});
it("should not change state to off when is selected, clicked and prop does not changed", () => {
const { getByRole } = render(
<form name={formName}>
<Toggle isSelected ariaLabel="My Toggle" />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(toggle.checked).toBeTruthy();
});
it("should not change state to on when is not selected, clicked and prop does not changed", () => {
const { getByRole } = render(
<form name={formName}>
<Toggle isSelected={false} ariaLabel="My Toggle" />
</form>
);
const toggle = getByRole(toggleRole);
userEvent.click(toggle);
expect(toggle.checked).toBeFalsy();
});
});
});