Files
obelisk/tests/session-disclosures.test.mjs
T
tommy0103 d9f31bbe8a fix(app): preserve session reader state across navigation
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.
2026-07-16 23:22:47 +08:00

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 },
]);
});