import { beforeEach, describe, expect, it, vi } from 'vitest'; import { loadDeviceSettings, saveDeviceSettings, loadBlacklist, saveBlacklist } from '../storage'; function mockChromeStorage(initial: Record = {}) { const store: Record = { ...initial }; (global as { chrome: unknown }).chrome = { storage: { local: { get: vi.fn((keys: string | string[]) => { const arr = Array.isArray(keys) ? keys : [keys]; const out: Record = {}; for (const k of arr) if (k in store) out[k] = store[k]; return Promise.resolve(out); }), set: vi.fn((kv: Record) => { Object.assign(store, kv); return Promise.resolve(); }), }, }, } as never; return store; } describe('service-worker/storage', () => { beforeEach(() => { mockChromeStorage(); }); it('loadDeviceSettings returns default when storage is empty', async () => { const s = await loadDeviceSettings(); expect(s.captureEnabled).toBe(false); expect(s.captureStyle).toBe('bar'); }); it('loadDeviceSettings returns stored value', async () => { mockChromeStorage({ relicarioSettings: { captureEnabled: true, captureStyle: 'toast' } }); const s = await loadDeviceSettings(); expect(s.captureEnabled).toBe(true); expect(s.captureStyle).toBe('toast'); }); it('saveDeviceSettings persists', async () => { const store = mockChromeStorage(); await saveDeviceSettings({ captureEnabled: true, captureStyle: 'bar' }); expect(store.relicarioSettings).toEqual({ captureEnabled: true, captureStyle: 'bar' }); }); it('loadBlacklist returns empty array by default', async () => { expect(await loadBlacklist()).toEqual([]); }); it('saveBlacklist / loadBlacklist round-trips', async () => { await saveBlacklist(['example.com', 'evil.test']); expect(await loadBlacklist()).toEqual(['example.com', 'evil.test']); }); });