Skip to content

Commit 67d880b

Browse files
authored
Merge pull request #114 from kpustakhod/not-existing-ids
Add test case
2 parents 1676efa + 303f08f commit 67d880b

File tree

1 file changed

+49
-2
lines changed

1 file changed

+49
-2
lines changed

src/__tests__/CheckboxTree.test.tsx

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import "@testing-library/jest-dom/extend-expect";
22
import { fireEvent, render, screen } from "@testing-library/react";
33
import React from "react";
4-
import TreeView, { flattenTree } from "..";
4+
import TreeView from "../TreeView";
5+
import { INode } from "../TreeView/types";
6+
import { flattenTree } from "../TreeView/utils";
57

68
const folder = {
79
name: "",
@@ -46,14 +48,16 @@ const folder = {
4648
],
4749
};
4850

49-
const data = flattenTree(folder);
51+
const initialData = flattenTree(folder);
5052

5153
function CheckboxTree({
5254
propagateSelect = true,
5355
multiSelect = true,
56+
data = initialData,
5457
}: {
5558
propagateSelect?: boolean;
5659
multiSelect?: boolean;
60+
data?: INode[];
5761
}) {
5862
return (
5963
<div>
@@ -286,3 +290,46 @@ test("should have the correct setsize and posinset values", async () => {
286290
expect(hopefullyMatcha).toHaveTextContent("Matcha");
287291
expect(hopefullyMatcha).toHaveAttribute("aria-setsize", "4");
288292
});
293+
294+
test("Should not throw error when previous selectedId is not in tree data", () => {
295+
const { queryAllByRole, container, rerender } = render(<CheckboxTree />);
296+
297+
const nodes = queryAllByRole("treeitem");
298+
299+
nodes[0].focus();
300+
if (document.activeElement == null)
301+
throw new Error(
302+
`Expected to find an active element on the document (after focusing the first element with role["treeitem"]), but did not.`
303+
);
304+
fireEvent.keyDown(document.activeElement, { key: "ArrowRight" }); //expand Fruits
305+
fireEvent.keyDown(document.activeElement, { key: "ArrowDown" }); //Avocados
306+
fireEvent.keyDown(document.activeElement, { key: "ArrowDown" }); //Bananas
307+
fireEvent.keyDown(document.activeElement, { key: "ArrowDown" }); //Berries
308+
fireEvent.keyDown(document.activeElement, { key: "Enter" });
309+
fireEvent.keyDown(document.activeElement, { key: "ArrowDown" }); //Oranges
310+
fireEvent.keyDown(document.activeElement, { key: "Enter" });
311+
312+
const expandedNodes = queryAllByRole("treeitem");
313+
314+
expect(container.querySelectorAll("[aria-checked='true']").length).toBe(2);
315+
expect(expandedNodes[3]).toHaveAttribute("aria-checked", "true");
316+
expect(expandedNodes[4]).toHaveAttribute("aria-checked", "true");
317+
318+
fireEvent.keyDown(document.activeElement, { key: "Enter" });
319+
320+
expect(container.querySelectorAll("[aria-checked='true']").length).toBe(1);
321+
expect(expandedNodes[3]).toHaveAttribute("aria-checked", "true");
322+
323+
const newData = {
324+
name: "",
325+
children: [
326+
{
327+
name: "Fruits",
328+
id: 30,
329+
},
330+
],
331+
};
332+
rerender(<CheckboxTree data={flattenTree(newData)} />);
333+
const newNodes = queryAllByRole("treeitem");
334+
expect(newNodes.length).toBe(1);
335+
});

0 commit comments

Comments
 (0)