Files
t8y2--dbx/packages/app-tests/sidebarTreeSelection.test.ts
2026-07-13 13:09:14 +08:00

39 lines
1.6 KiB
TypeScript
Vendored

import { strict as assert } from "node:assert";
import { test } from "vitest";
import { selectedTreeNodesInVisibleOrder, treeSelectionRangeIdsByIndex, treeSelectionRangeIds } from "../../apps/desktop/src/lib/sidebar/sidebarTreeSelection.ts";
import type { TreeNode } from "../../apps/desktop/src/types/database.ts";
const nodes: TreeNode[] = [
{ id: "orders", label: "orders", type: "table" },
{ id: "order_lines", label: "order_lines", type: "table" },
{ id: "products", label: "products", type: "table" },
{ id: "customers", label: "customers", type: "table" },
];
test("tree range selection uses the current visible node order", () => {
const filtered = [nodes[0], nodes[1], nodes[3]];
assert.deepEqual(treeSelectionRangeIds(filtered, "customers", "orders"), ["orders", "order_lines", "customers"]);
});
test("tree range selection falls back to the current node when the anchor is filtered out", () => {
const filtered = [nodes[1], nodes[3]];
assert.deepEqual(treeSelectionRangeIds(filtered, "customers", "orders"), ["customers"]);
});
test("tree range selection can reuse precomputed visible indexes", () => {
const filtered = [nodes[0], nodes[1], nodes[3]];
assert.deepEqual(treeSelectionRangeIdsByIndex(filtered, 2, 0, "customers"), ["orders", "order_lines", "customers"]);
});
test("selected tree nodes are ordered and limited by visible nodes", () => {
const filtered = [nodes[1], nodes[3]];
assert.deepEqual(
selectedTreeNodesInVisibleOrder(filtered, ["products", "customers", "order_lines"]).map((node) => node.id),
["order_lines", "customers"],
);
});