monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
106 lines (96 loc) • 3.2 kB
JavaScript
import React from "react";
import renderer from "react-test-renderer";
import { render } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import List from "../List";
import ListItem from "../../ListItem/ListItem";
describe("List", () => {
it("renders correctly without props", () => {
const tree = renderer.create(<List />).toJSON();
expect(tree).toMatchSnapshot();
});
it("renders correctly with empty props", () => {
const tree = renderer.create(<List>Something</List>).toJSON();
expect(tree).toMatchSnapshot();
});
it("renders correctly with list items", () => {
const tree = renderer
.create(
<List>
<ListItem>1</ListItem>
<ListItem>2</ListItem>
</List>
)
.toJSON();
expect(tree).toMatchSnapshot();
});
describe("accessibility tests", () => {
it("List should have role listbox", () => {
const { getByRole } = render(
<List>
<ListItem>1</ListItem>
<ListItem>2</ListItem>
</List>
);
expect(getByRole("listbox")).toBeInTheDocument();
});
it("ListItem should have role option", () => {
const { getAllByRole } = render(
<List>
<ListItem>1</ListItem>
<ListItem>2</ListItem>
</List>
);
expect(getAllByRole("option")).toHaveLength(2);
});
it("disabled ListItem should have aria-selected", () => {
const { getByTestId } = render(
<List>
<ListItem data-testid="list-item-1" disabled>
1
</ListItem>
<ListItem data-testid="list-item-2">1</ListItem>
</List>
);
expect(getByTestId("list-item-1")).toHaveAttribute("aria-disabled", "true");
expect(getByTestId("list-item-2")).toHaveAttribute("aria-disabled", "false");
});
it("selected ListItem should have aria-selected", () => {
const { getByTestId } = render(
<List>
<ListItem data-testid="list-item-1" selected>
1
</ListItem>
<ListItem data-testid="list-item-2">1</ListItem>
</List>
);
expect(getByTestId("list-item-1")).toHaveAttribute("aria-selected", "true");
expect(getByTestId("list-item-2")).not.toHaveAttribute("aria-selected");
});
it("List should have aria-activedescendant", () => {
const { getByRole } = render(
<List>
<ListItem id="list-item-1">1</ListItem>
<ListItem id="list-item-2" selected>
2
</ListItem>
</List>
);
expect(getByRole("listbox")).toHaveAttribute("aria-activedescendant", "list-item-2");
});
it("List aria-activedescendant", () => {
const { getByRole } = render(
<List id="list">
<ListItem>1</ListItem>
<ListItem>2</ListItem>
<ListItem selected>3</ListItem>
</List>
);
const list = getByRole("listbox");
expect(list).toHaveAttribute("aria-activedescendant", "list-item-2");
userEvent.tab();
userEvent.keyboard("{arrowup}");
expect(list).toHaveAttribute("aria-activedescendant", "list-item-1");
});
});
});