import { expect } from "@std/expect"; import { describe, it } from "@std/testing/bdd"; import { renderToStaticMarkup } from "react-dom/server"; import { CheckboxTree, toCheckboxTreeItems } from "./checkbox-tree"; describe("toCheckboxTreeItems", () => { it("nests grouped components and keeps ungrouped ones as leaves", () => { expect( toCheckboxTreeItems( [ { id: 1, name: "Website", order: 0 }, { id: 2, name: "REST", order: 1, groupId: 7, groupOrder: 0 }, { id: 3, name: "GraphQL", order: 2, groupId: 7, groupOrder: 1 }, ], [{ id: 7, name: "API" }], ), ).toEqual([ { id: 1, label: "Website" }, { id: 7, label: "API", children: [ { id: 2, label: "REST" }, { id: 3, label: "GraphQL" }, ], }, ]); }); }); describe("CheckboxTree", () => { const noop = () => {}; const items = [ { id: 1, label: "Website" }, { id: 7, label: "API", children: [ { id: 2, label: "REST" }, { id: 3, label: "GraphQL" }, ], }, ]; function states(value: number[]) { const html = renderToStaticMarkup( , ); return [...html.matchAll(/role="checkbox" aria-checked="([^"]+)"/g)].map( (m) => m[1], ); } it("renders a row per leaf, group and child", () => { expect(states([])).toEqual(["false", "false", "false", "false"]); }); it("marks a partially selected group as indeterminate", () => { expect(states([2])).toEqual(["false", "mixed", "true", "false"]); }); it("marks a fully selected group as checked", () => { expect(states([1, 2, 3])).toEqual(["true", "true", "true", "true"]); }); it("hides a group without children", () => { const html = renderToStaticMarkup( , ); expect(html).not.toContain("Empty group"); }); });