100 lines
3.4 KiB
TypeScript
Vendored
100 lines
3.4 KiB
TypeScript
Vendored
import { strict as assert } from "node:assert";
|
|
import { test } from "vitest";
|
|
import { columnOrderKeysForIndexes, isDefaultColumnOrder, moveVisibleColumnIndex, orderedColumnIndexes, uniqueDataGridColumnOrderKeys } from "../../apps/desktop/src/lib/dataGrid/dataGridColumnOrder";
|
|
|
|
test("creates stable keys for duplicate column names", () => {
|
|
assert.deepEqual(uniqueDataGridColumnOrderKeys(["id", "name", "name"]), [`id\u00000`, `name\u00000`, `name\u00001`]);
|
|
});
|
|
|
|
test("uses source columns when available", () => {
|
|
assert.deepEqual(uniqueDataGridColumnOrderKeys(["id", "display_name"], ["id", "name"]), [`id\u00000`, `name\u00000`]);
|
|
});
|
|
|
|
test("orders available indexes from persisted keys and appends new columns", () => {
|
|
const keys = uniqueDataGridColumnOrderKeys(["id", "name", "email", "created_at"]);
|
|
assert.deepEqual(
|
|
orderedColumnIndexes({
|
|
availableIndexes: [0, 1, 2, 3],
|
|
columnKeys: keys,
|
|
orderedKeys: [keys[2], keys[0], "missing"],
|
|
}),
|
|
[2, 0, 1, 3],
|
|
);
|
|
});
|
|
|
|
test("ignores unavailable indexes while preserving displayable columns", () => {
|
|
const keys = uniqueDataGridColumnOrderKeys(["id", "name", "email"]);
|
|
assert.deepEqual(
|
|
orderedColumnIndexes({
|
|
availableIndexes: [1, 2],
|
|
columnKeys: keys,
|
|
orderedKeys: [keys[0], keys[2], keys[1]],
|
|
}),
|
|
[2, 1],
|
|
);
|
|
});
|
|
|
|
test("moves a visible column forward", () => {
|
|
assert.deepEqual(
|
|
moveVisibleColumnIndex({
|
|
orderedIndexes: [0, 1, 2, 3],
|
|
hiddenIndexes: new Set(),
|
|
fromVisibleIndex: 3,
|
|
toVisibleIndex: 1,
|
|
}),
|
|
[0, 3, 1, 2],
|
|
);
|
|
});
|
|
|
|
test("moves a visible column backward", () => {
|
|
assert.deepEqual(
|
|
moveVisibleColumnIndex({
|
|
orderedIndexes: [0, 1, 2, 3],
|
|
hiddenIndexes: new Set(),
|
|
fromVisibleIndex: 1,
|
|
toVisibleIndex: 3,
|
|
}),
|
|
[0, 2, 3, 1],
|
|
);
|
|
});
|
|
|
|
test("moves a visible column to an adjacent later position", () => {
|
|
assert.deepEqual(
|
|
moveVisibleColumnIndex({
|
|
orderedIndexes: [0, 1, 2, 3],
|
|
hiddenIndexes: new Set(),
|
|
fromVisibleIndex: 1,
|
|
toVisibleIndex: 2,
|
|
}),
|
|
[0, 2, 1, 3],
|
|
);
|
|
});
|
|
|
|
test("moves visible columns without disturbing hidden column identity", () => {
|
|
assert.deepEqual(
|
|
moveVisibleColumnIndex({
|
|
orderedIndexes: [0, 1, 2, 3],
|
|
hiddenIndexes: new Set([1]),
|
|
fromVisibleIndex: 2,
|
|
toVisibleIndex: 0,
|
|
}),
|
|
[3, 0, 1, 2],
|
|
);
|
|
});
|
|
|
|
test("returns no-op for invalid or same visible indexes", () => {
|
|
const orderedIndexes = [0, 1, 2];
|
|
assert.deepEqual(moveVisibleColumnIndex({ orderedIndexes, hiddenIndexes: new Set(), fromVisibleIndex: 1, toVisibleIndex: 1 }), orderedIndexes);
|
|
assert.deepEqual(moveVisibleColumnIndex({ orderedIndexes, hiddenIndexes: new Set(), fromVisibleIndex: -1, toVisibleIndex: 1 }), orderedIndexes);
|
|
});
|
|
|
|
test("converts indexes back to persisted keys", () => {
|
|
const keys = uniqueDataGridColumnOrderKeys(["id", "name", "email"]);
|
|
assert.deepEqual(columnOrderKeysForIndexes([2, 0, 1], keys), [keys[2], keys[0], keys[1]]);
|
|
});
|
|
|
|
test("detects default order", () => {
|
|
assert.equal(isDefaultColumnOrder([0, 1, 2], [0, 1, 2]), true);
|
|
assert.equal(isDefaultColumnOrder([0, 1, 2], [1, 0, 2]), false);
|
|
});
|