test(01-03): add failing tests for IDB DB + snapshots + persist API [RED]

- 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.
This commit is contained in:
2026-05-08 23:30:02 -04:00
parent b6cc9000c3
commit e2d82ffa90
3 changed files with 187 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
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,
});
});
});