test(tree-view): coverage for expandAll and expandNodes (#2063)

This commit is contained in:
Eric Liu 2024-12-08 11:09:23 -08:00 committed by GitHub
commit f1a27ec855
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 97 additions and 3 deletions

View file

@ -1,5 +1,54 @@
<script> <script lang="ts">
import { TreeView as TreeViewNav } from "carbon-components-svelte";
import TreeView from "./TreeView/TreeView.test.svelte"; import TreeView from "./TreeView/TreeView.test.svelte";
import { onMount } from "svelte";
const routes = [
{
path: "/treeview",
name: "TreeView",
component: TreeView,
},
] as const;
let currentPath = window.location.pathname;
function navigate(path: string) {
history.pushState({}, "", path);
currentPath = path;
}
onMount(() => {
const handlePopState = () => {
currentPath = window.location.pathname;
};
window.addEventListener("popstate", handlePopState);
return () => {
window.removeEventListener("popstate", handlePopState);
};
});
</script> </script>
<TreeView /> <div style:display="flex">
<div>
<TreeViewNav
labelText="Routes"
nodes={routes.map((route) => ({
id: route.path,
text: route.name,
}))}
on:select={(e) => {
navigate(e.detail.id.toString());
}}
/>
</div>
<div style:flex="1">
{#each routes as route (route.path)}
{#if currentPath === route.path}
<svelte:component this={route.component} />
{/if}
{/each}
</div>
</div>

View file

@ -7,7 +7,7 @@
let treeview: TreeView; let treeview: TreeView;
let activeId: TreeNodeId = ""; let activeId: TreeNodeId = "";
let selectedIds: TreeNodeId[] = []; let selectedIds: TreeNodeId[] = [];
let expandedIds: TreeNodeId[] = [1]; let expandedIds: TreeNodeId[] = [];
let nodes: ComponentProps<TreeView>["nodes"] = [ let nodes: ComponentProps<TreeView>["nodes"] = [
{ id: 0, text: "AI / Machine learning", icon: Analytics }, { id: 0, text: "AI / Machine learning", icon: Analytics },
{ {
@ -81,3 +81,12 @@
</TreeView> </TreeView>
<Button on:click={treeview.expandAll}>Expand all</Button> <Button on:click={treeview.expandAll}>Expand all</Button>
<Button
on:click={() => {
treeview.expandNodes((node) => {
return /^IBM/.test(node.text);
});
}}
>
Expand some nodes
</Button>

View file

@ -17,6 +17,16 @@ describe("TreeView", () => {
}); });
}; };
const noExpandedItems = () => {
expect(screen.queryAllByRole("treeitem", { expanded: true })).toHaveLength(
0,
);
};
const getAllExpandedItems = () => {
return screen.getAllByRole("treeitem", { expanded: true });
};
it("can select a node", async () => { it("can select a node", async () => {
const consoleLog = vi.spyOn(console, "log"); const consoleLog = vi.spyOn(console, "log");
@ -37,4 +47,30 @@ describe("TreeView", () => {
text: "AI / Machine learning", text: "AI / Machine learning",
}); });
}); });
it("can expand all nodes", async () => {
render(TreeView);
noExpandedItems();
const expandAllButton = screen.getByText("Expand all");
await user.click(expandAllButton);
expect(getAllExpandedItems()).toHaveLength(5);
});
it("can expand some nodes", async () => {
render(TreeView);
noExpandedItems();
const expandSomeNodesButton = screen.getByText("Expand some nodes");
await user.click(expandSomeNodesButton);
expect(getAllExpandedItems()).toHaveLength(2);
expect(
screen.getByText("IBM Analytics Engine").parentNode?.parentNode,
).toHaveAttribute("aria-expanded", "true");
});
}); });