Files
Investidor-V2/tests/frontend/opportunity-selection.test.mjs
T
2026-11-02 20:31:15 +02:00

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