Files

47 lines
1.4 KiB
TypeScript

import type { StateStorage } from 'zustand/middleware';
import { createWebStateStorage } from '../src/state/persistStorage.web';
function createThrowingStorage(): StateStorage<void> {
return {
getItem: () => null,
removeItem: () => {
throw new Error('Storage is unavailable.');
},
setItem: () => {
throw new Error('Storage is unavailable.');
},
};
}
describe('createWebStateStorage', () => {
it('uses provided storage when it is available', () => {
const backingStore = new Map<string, string>();
const providedStorage: StateStorage<void> = {
getItem: (name: string) => backingStore.get(name) ?? null,
removeItem: (name: string) => {
backingStore.delete(name);
},
setItem: (name: string, value: string) => {
backingStore.set(name, value);
},
};
const storage = createWebStateStorage(() => providedStorage);
storage.setItem('throne', 'claimed');
expect(providedStorage.getItem('throne')).toBe('claimed');
expect(storage.getItem('throne')).toBe('claimed');
});
it('falls back to memory storage when local storage is unavailable', () => {
const storage = createWebStateStorage(createThrowingStorage);
storage.setItem('throne', 'hidden');
expect(storage.getItem('throne')).toBe('hidden');
storage.removeItem('throne');
expect(storage.getItem('throne')).toBeNull();
});
});