import assert from 'node:assert/strict'; import test from 'node:test'; import { readOpportunitySelection, persistOpportunitySelection, } from '../../resources/js/lib/opportunity-selection.ts'; await test('selection accepts only unique positive safe integer identifiers', () => { const old = globalThis.sessionStorage; try { for (const value of ['null', '{}', '"123"', 'invalid', 'false']) { globalThis.sessionStorage = { getItem: () => value }; assert.deepEqual(readOpportunitySelection(), []); } globalThis.sessionStorage = { getItem: () => '[1,2,1,"3",null,-1,0,1.5,9007199254740992]', }; assert.deepEqual(readOpportunitySelection(), [1, 2]); } finally { globalThis.sessionStorage = old; } }); await test('blocked storage never prevents reading, selecting or clearing and reports persistence failure', () => { const old = globalThis.sessionStorage; try { globalThis.sessionStorage = { getItem() { throw Error('blocked'); }, setItem() { throw Error('quota'); }, removeItem() { throw Error('blocked'); }, }; assert.deepEqual(readOpportunitySelection(), []); assert.equal(persistOpportunitySelection([1]), false); assert.equal(persistOpportunitySelection([]), false); } finally { globalThis.sessionStorage = old; } }); await test('selection persists and clears the existing key without altering other browser data', () => { const old = globalThis.sessionStorage; const memory = new Map([['unrelated', 'preserved']]); try { globalThis.sessionStorage = { getItem: (k) => memory.get(k) ?? null, setItem: (k, v) => memory.set(k, v), removeItem: (k) => memory.delete(k), }; assert.equal(persistOpportunitySelection([12, 4]), true); assert.deepEqual(readOpportunitySelection(), [12, 4]); assert.equal(persistOpportunitySelection([]), true); assert.deepEqual(readOpportunitySelection(), []); assert.equal(memory.get('unrelated'), 'preserved'); } finally { globalThis.sessionStorage = old; } });