Files

49 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2026-07-14 03:45:39 +08:00
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 },
]);
});