47 lines
1.4 KiB
TypeScript
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();
|
|
});
|
|
});
|