39 lines
1.6 KiB
TypeScript
Vendored
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"],
|
|
);
|
|
});
|