|
1 | 1 | import "@testing-library/jest-dom/extend-expect";
|
2 | 2 | import { fireEvent, render, screen } from "@testing-library/react";
|
3 | 3 | 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"; |
5 | 7 |
|
6 | 8 | const folder = {
|
7 | 9 | name: "",
|
@@ -46,14 +48,16 @@ const folder = {
|
46 | 48 | ],
|
47 | 49 | };
|
48 | 50 |
|
49 |
| -const data = flattenTree(folder); |
| 51 | +const initialData = flattenTree(folder); |
50 | 52 |
|
51 | 53 | function CheckboxTree({
|
52 | 54 | propagateSelect = true,
|
53 | 55 | multiSelect = true,
|
| 56 | + data = initialData, |
54 | 57 | }: {
|
55 | 58 | propagateSelect?: boolean;
|
56 | 59 | multiSelect?: boolean;
|
| 60 | + data?: INode[]; |
57 | 61 | }) {
|
58 | 62 | return (
|
59 | 63 | <div>
|
@@ -286,3 +290,46 @@ test("should have the correct setsize and posinset values", async () => {
|
286 | 290 | expect(hopefullyMatcha).toHaveTextContent("Matcha");
|
287 | 291 | expect(hopefullyMatcha).toHaveAttribute("aria-setsize", "4");
|
288 | 292 | });
|
| 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