61 lines
2.2 KiB
JavaScript
61 lines
2.2 KiB
JavaScript
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;
|
|
}
|
|
});
|