Cache semantic timeline anchors and disclosures per session instead of relying on KeepAlive. Restore state after virtualized layout stabilization while preserving explicit focus and tail-follow behavior.
49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
|
|
import { createSessionDisclosureState } from '../app/src/renderer/src/session-disclosures.mjs';
|
|
|
|
test('disclosure state survives virtual row unmounts without depending on DOM nodes', () => {
|
|
const disclosures = createSessionDisclosureState();
|
|
|
|
disclosures.toggleOpen('tool:call-1', 'message-1');
|
|
disclosures.toggleRaw('tool:call-1', 'message-1');
|
|
|
|
assert.equal(disclosures.isOpen('tool:call-1'), true);
|
|
assert.equal(disclosures.isRaw('tool:call-1'), true);
|
|
|
|
disclosures.toggleRaw('tool:call-1', 'message-1');
|
|
disclosures.toggleOpen('tool:call-1', 'message-1');
|
|
|
|
assert.equal(disclosures.isOpen('tool:call-1'), false);
|
|
assert.equal(disclosures.isRaw('tool:call-1'), false);
|
|
});
|
|
|
|
test('disclosure state forgets entries owned by removed messages', () => {
|
|
const disclosures = createSessionDisclosureState();
|
|
disclosures.toggleOpen('tool:call-1', 'message-1');
|
|
disclosures.toggleOpen('tool:call-2', 'message-2');
|
|
|
|
disclosures.retainMessages(new Set(['message-2']));
|
|
|
|
assert.equal(disclosures.isOpen('tool:call-1'), false);
|
|
assert.equal(disclosures.isOpen('tool:call-2'), true);
|
|
});
|
|
|
|
test('disclosure state restores a serializable snapshot for retained messages', () => {
|
|
const source = createSessionDisclosureState();
|
|
source.toggleOpen('tool:call-1', 'message-1');
|
|
source.toggleRaw('tool:call-1', 'message-1');
|
|
source.toggleOpen('tool:call-2', 'message-2');
|
|
|
|
const restored = createSessionDisclosureState();
|
|
restored.restore(source.snapshot(), new Set(['message-1']));
|
|
|
|
assert.equal(restored.isOpen('tool:call-1'), true);
|
|
assert.equal(restored.isRaw('tool:call-1'), true);
|
|
assert.equal(restored.isOpen('tool:call-2'), false);
|
|
assert.deepEqual(restored.snapshot(), [
|
|
{ key: 'tool:call-1', messageUuid: 'message-1', open: true, raw: true },
|
|
]);
|
|
});
|