Files
Genarrative/src/persistence/storage.test.ts
T
kdletters cbc27bad4a
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

66 lines
1.5 KiB
TypeScript

import {describe, expect, it} from 'vitest';
import {isRecord, type JsonStorage,readStoredJson, removeStoredJson, writeStoredJson} from './storage';
function createMemoryStorage(): JsonStorage {
const values = new Map<string, string>();
return {
getItem(key) {
return values.has(key) ? values.get(key)! : null;
},
setItem(key, value) {
values.set(key, value);
},
removeItem(key) {
values.delete(key);
},
};
}
describe('storage helpers', () => {
it('reads parsed json values from storage', () => {
const storage = createMemoryStorage();
writeStoredJson({
key: 'example',
value: {value: 42},
storage,
});
const result = readStoredJson({
key: 'example',
storage,
parse: value => (isRecord(value) && typeof value.value === 'number' ? value.value : null),
});
expect(result).toBe(42);
});
it('returns null when persisted json cannot be parsed', () => {
const storage = createMemoryStorage();
storage.setItem('broken', '{not-valid-json');
const result = readStoredJson({
key: 'broken',
storage,
parse: () => 'unreachable',
});
expect(result).toBeNull();
});
it('removes persisted values', () => {
const storage = createMemoryStorage();
writeStoredJson({
key: 'example',
value: {value: 'keep'},
storage,
});
removeStoredJson('example', storage);
expect(storage.getItem('example')).toBeNull();
});
});