Files
donutbrowser/src/lib/table-tools.test.mjs
T
2026-10-07 15:32:54 +04:00

99 lines
2.6 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
filterTableRows,
resolveTableVisibility,
selectTableRange,
} from "./table-tools.ts";
const rows = [
{ id: "alpha", name: "Client North", state: "stopped", tags: ["work", "eu"] },
{ id: "beta", name: "Client South", state: "running", tags: ["work"] },
{ id: "gamma", name: "Personal", state: "stopped", tags: ["eu"] },
];
const filters = [
{ id: "state", value: (row) => row.state },
{ id: "tag", value: (row) => row.tags },
];
const search = (row) => row.name;
test("search and facets intersect; values in a single facet form alternatives", () => {
const result = filterTableRows(rows, "CLIENT", search, filters, {
state: ["stopped", "running"],
tag: ["eu"],
});
assert.deepEqual(
result.map((row) => row.id),
["alpha"],
);
assert.equal(
filterTableRows(rows, "client south", search, filters, {}).length,
1,
);
assert.equal(
filterTableRows(rows, "personal", search, filters, { tag: ["work"] })
.length,
0,
);
});
test("facet counts exclude their own filter but retain all other constraints", () => {
assert.deepEqual(
filterTableRows(
rows,
"client",
search,
filters,
{ state: ["stopped"], tag: ["work"] },
"state",
).map((row) => row.id),
["alpha", "beta"],
);
});
test("range selection follows the displayed order and skips unavailable rows", () => {
const eligible = ["gamma", "alpha", "beta"];
assert.deepEqual(
selectTableRange(eligible, {}, "gamma", "beta", true, true),
{ gamma: true, alpha: true, beta: true },
);
assert.deepEqual(
selectTableRange(["gamma", "beta"], {}, "gamma", "beta", true, true),
{ gamma: true, beta: true },
);
assert.deepEqual(
selectTableRange(
eligible,
{ alpha: true, beta: true, gamma: true },
"beta",
"alpha",
false,
true,
),
{ gamma: true },
);
});
test("a removed range anchor becomes a single selection and a removed target cannot be selected", () => {
assert.deepEqual(
selectTableRange(["beta"], {}, "alpha", "beta", true, true),
{ beta: true },
);
assert.deepEqual(
selectTableRange(["beta"], { beta: true }, "beta", "alpha", true, true),
{ beta: true },
);
});
test("column preferences override responsive defaults but cannot hide identity or reveal unavailable features", () => {
assert.deepEqual(
resolveTableVisibility(
{ note: false, tags: true },
{ note: true, tags: false, name: false, bot: true },
["name"],
["bot"],
),
{ note: true, tags: false, name: true, bot: false },
);
});