Milestone v1.0: FamilySync MVP #1

Merged
luckberg merged 376 commits from gsd/v1.0-milestone into main 2026-06-10 17:39:19 -04:00
Showing only changes of commit 19d92c671b - Show all commits
@@ -186,25 +186,25 @@ describe('reminderScheduler — catch-up window and missed-tick recovery', () =>
const sub = { id: 1, userId: 1, endpoint: 'https://push.example.com/1', p256dh: 'k', auth: 'a' }
function rowForNow(now: Date) {
function rowForNow() {
return makeEventRow({ uid: 'single-fire-uid', dtstartUtc: eventDtstart, ...sub, subId: sub.id, subUserId: sub.userId, subEndpoint: sub.endpoint, subP256dh: sub.p256dh, subAuth: sub.auth })
}
// Tick at t0 (event 15 min out)
vi.setSystemTime(t0)
vi.mocked(db.select).mockReturnValue(makeSelectMock([rowForNow(t0)]))
vi.mocked(db.select).mockReturnValue(makeSelectMock([rowForNow()]))
await runReminderCheck(t0)
// Tick at t0+1min (event 14 min out — still in window, same uid)
const t1 = new Date(t0.getTime() + 60 * 1000)
vi.setSystemTime(t1)
vi.mocked(db.select).mockReturnValue(makeSelectMock([rowForNow(t1)]))
vi.mocked(db.select).mockReturnValue(makeSelectMock([rowForNow()]))
await runReminderCheck(t1)
// Tick at t0+2min (event 13 min out — still in window, same uid)
const t2 = new Date(t0.getTime() + 2 * 60 * 1000)
vi.setSystemTime(t2)
vi.mocked(db.select).mockReturnValue(makeSelectMock([rowForNow(t2)]))
vi.mocked(db.select).mockReturnValue(makeSelectMock([rowForNow()]))
await runReminderCheck(t2)
// Exactly one dispatch total: uid dedup prevents re-fire on ticks 2 and 3