mirror of
https://github.com/GetOpenScript/OpenScript.git
synced 2026-09-18 09:45:43 +00:00
Complete OpenScript runtime roadmap
This commit is contained in:
52
tests/storage.test.js
Normal file
52
tests/storage.test.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {
|
||||
garbageCollectScriptStorage, runScriptStorageOperation,
|
||||
} from '../src/utils/storage.js';
|
||||
|
||||
const mockChromeStorage = initial => {
|
||||
const data = structuredClone(initial);
|
||||
globalThis.chrome = { storage: { local: {
|
||||
get: async key => key === null ? { ...data } : Object.hasOwn(data, key) ? { [key]: data[key] } : {},
|
||||
set: async values => Object.assign(data, values),
|
||||
remove: async keys => [keys].flat().forEach(key => delete data[key]),
|
||||
} } };
|
||||
return data;
|
||||
};
|
||||
|
||||
test('script storage isolates, lists, and deletes values by script ID', async () => {
|
||||
const data = mockChromeStorage({
|
||||
scripts: [
|
||||
{ id: 'script_a', storageToken: 'token-a' },
|
||||
{ id: 'script_b', storageToken: 'token-b' },
|
||||
],
|
||||
storage_script_b_shared: 'private-b',
|
||||
});
|
||||
|
||||
await runScriptStorageOperation('token-a', 'set', 'shared', { count: 1 });
|
||||
assert.deepEqual(data.storage_script_a_shared, { count: 1 });
|
||||
assert.deepEqual(await runScriptStorageOperation('token-a', 'get', 'shared'), {
|
||||
found: true, value: { count: 1 },
|
||||
});
|
||||
assert.deepEqual(await runScriptStorageOperation('token-a', 'get', 'missing'), {
|
||||
found: false, value: undefined,
|
||||
});
|
||||
assert.deepEqual(await runScriptStorageOperation('token-a', 'list'), { keys: ['shared'] });
|
||||
await runScriptStorageOperation('token-a', 'delete', 'shared');
|
||||
assert.equal(data.storage_script_a_shared, undefined);
|
||||
await assert.rejects(() => runScriptStorageOperation('token-bad', 'list'), /Invalid script storage token/);
|
||||
});
|
||||
|
||||
test('script storage garbage collection removes only orphaned script keys', async () => {
|
||||
const data = mockChromeStorage({
|
||||
scripts: [{ id: 'script_a' }],
|
||||
storage_script_a_keep: 1,
|
||||
storage_script_deleted_remove: 2,
|
||||
unrelated: 3,
|
||||
});
|
||||
const removed = await garbageCollectScriptStorage(['script_a']);
|
||||
assert.deepEqual(removed, ['storage_script_deleted_remove']);
|
||||
assert.equal(data.storage_script_a_keep, 1);
|
||||
assert.equal(data.storage_script_deleted_remove, undefined);
|
||||
assert.equal(data.unrelated, 3);
|
||||
});
|
||||
Reference in New Issue
Block a user