48 lines
1.8 KiB
TypeScript
48 lines
1.8 KiB
TypeScript
import { test } from 'node:test';
|
|||
|
|
import assert from 'node:assert/strict';
|
||
|
|
|
||
|
|
// This module uses atomWithStorage(..., { getOnInit: true }), so it reads
|
||
|
|
// `localStorage` the moment it's evaluated. node has none, so install a no-op
|
||
|
|
// mock, then import dynamically (a static import would be hoisted above the
|
||
|
|
// mock assignment and evaluate the module too early).
|
||
|
|
(globalThis as { localStorage?: unknown }).localStorage = {
|
||
|
|
getItem: () => null,
|
||
|
|
setItem: () => undefined,
|
||
|
|
removeItem: () => undefined,
|
||
|
|
};
|
||
|
|
|
||
|
|
const { addRecentForwardTarget } = await import('./recentForwardTargets');
|
||
|
|
|
||
|
|
test('addRecentForwardTarget prepends a new roomId', () => {
|
||
|
|
assert.deepEqual(addRecentForwardTarget(['!a', '!b'], '!c'), ['!c', '!a', '!b']);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('addRecentForwardTarget dedupes and moves the roomId to the front', () => {
|
||
|
|
assert.deepEqual(addRecentForwardTarget(['!a', '!b', '!c'], '!b'), ['!b', '!a', '!c']);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('addRecentForwardTarget ignores an empty roomId', () => {
|
||
|
|
assert.deepEqual(addRecentForwardTarget(['!a', '!b'], ''), ['!a', '!b']);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('addRecentForwardTarget caps the list at 8 entries, dropping the oldest', () => {
|
||
|
|
const eight = Array.from({ length: 8 }, (_, i) => `!r${i}`);
|
||
|
|
const result = addRecentForwardTarget(eight, '!new');
|
||
|
|
assert.equal(result.length, 8);
|
||
|
|
assert.equal(result[0], '!new');
|
||
|
|
// the oldest entry (last) is dropped
|
||
|
|
assert.equal(result.includes('!r7'), false);
|
||
|
|
assert.deepEqual(result.slice(1), eight.slice(0, 7));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('addRecentForwardTarget does not mutate its input', () => {
|
||
|
|
const input = ['!a', '!b'];
|
||
|
|
const before = [...input];
|
||
|
|
addRecentForwardTarget(input, '!c');
|
||
|
|
assert.deepEqual(input, before);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('addRecentForwardTarget on an empty history returns a single-element list', () => {
|
||
|
|
assert.deepEqual(addRecentForwardTarget([], '!first'), ['!first']);
|
||
|
|
});
|