Spaces:
Sleeping
Sleeping
| /** | |
| * requestPersistentStorage (H8 / M6) — best-effort persistent storage request | |
| * so prefetched tiles / file blobs / IndexedDB aren't evicted under pressure. | |
| */ | |
| import { describe, it, expect, afterEach, vi } from 'vitest'; | |
| import { requestPersistentStorage } from '../../../src/sync/persistentStorage'; | |
| const original = (navigator as Navigator & { storage?: StorageManager }).storage; | |
| afterEach(() => { | |
| Object.defineProperty(navigator, 'storage', { value: original, configurable: true }); | |
| vi.restoreAllMocks(); | |
| }); | |
| function stubStorage(storage: unknown) { | |
| Object.defineProperty(navigator, 'storage', { value: storage, configurable: true }); | |
| } | |
| describe('requestPersistentStorage', () => { | |
| it('requests persistence when not already granted', async () => { | |
| const persist = vi.fn().mockResolvedValue(true); | |
| const persisted = vi.fn().mockResolvedValue(false); | |
| stubStorage({ persist, persisted }); | |
| expect(await requestPersistentStorage()).toBe(true); | |
| expect(persist).toHaveBeenCalledOnce(); | |
| }); | |
| it('skips the prompt when already persisted', async () => { | |
| const persist = vi.fn().mockResolvedValue(true); | |
| const persisted = vi.fn().mockResolvedValue(true); | |
| stubStorage({ persist, persisted }); | |
| expect(await requestPersistentStorage()).toBe(true); | |
| expect(persist).not.toHaveBeenCalled(); | |
| }); | |
| it('returns false (no throw) when the API is unavailable', async () => { | |
| stubStorage(undefined); | |
| expect(await requestPersistentStorage()).toBe(false); | |
| }); | |
| it('returns false (no throw) when persist rejects', async () => { | |
| stubStorage({ persist: vi.fn().mockRejectedValue(new Error('denied')) }); | |
| expect(await requestPersistentStorage()).toBe(false); | |
| }); | |
| }); | |