e2d82ffa90
- db.test.ts (4 tests): IDB-primary path opens both stores + round-trips
saves and save_snapshots; localStorage-fallback path via vi.doMock('idb')
asserts LocalStorageDBAdapter is returned and tlg.saves.main is written
- snapshots.test.ts (4 tests): basic put + listSnapshots, empty store
returns [], CORE-08 5-then-3 retention with newest-first ordering, and
pruned entries are oldest by savedAt
- persist.test.ts (4 tests): all 4 navigator.storage scenarios per
CORE-05 + RESEARCH Pitfall 2 (granted true / false / throws / missing)
RED phase per TDD plan-level gate. Tests fail because db.ts / snapshots.ts /
persist.ts / db-localstorage-adapter.ts do not exist yet.
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { requestPersistence } from './persist';
|
|
|
|
// Tests for navigator.storage.persist() — must surface granted=false
|
|
// respectfully without spamming the user (CORE-05 + RESEARCH Pitfall 2:
|
|
// iOS Safari often returns false). Each test stubs `navigator` globally
|
|
// to one of the four scenarios.
|
|
|
|
describe('requestPersistence (CORE-05)', () => {
|
|
beforeEach(() => vi.unstubAllGlobals());
|
|
|
|
it('returns granted=true when navigator.storage.persist resolves true', async () => {
|
|
vi.stubGlobal('navigator', { storage: { persist: async () => true } });
|
|
expect(await requestPersistence()).toEqual({
|
|
granted: true,
|
|
apiAvailable: true,
|
|
});
|
|
});
|
|
|
|
it('returns granted=false when navigator.storage.persist resolves false', async () => {
|
|
vi.stubGlobal('navigator', { storage: { persist: async () => false } });
|
|
expect(await requestPersistence()).toEqual({
|
|
granted: false,
|
|
apiAvailable: true,
|
|
});
|
|
});
|
|
|
|
it('returns granted=false when persist throws', async () => {
|
|
vi.stubGlobal('navigator', {
|
|
storage: {
|
|
persist: async () => {
|
|
throw new Error('boom');
|
|
},
|
|
},
|
|
});
|
|
expect(await requestPersistence()).toEqual({
|
|
granted: false,
|
|
apiAvailable: true,
|
|
});
|
|
});
|
|
|
|
it('returns apiAvailable=false when navigator.storage is missing', async () => {
|
|
vi.stubGlobal('navigator', {});
|
|
expect(await requestPersistence()).toEqual({
|
|
granted: false,
|
|
apiAvailable: false,
|
|
});
|
|
});
|
|
});
|