mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-10-22 15:18:42 +02:00
99 lines
2.6 KiB
JavaScript
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 },
|
|
);
|
|
});
|