Phase 18: Auto timezone detection and ability to change timezone #21

Merged
luckberg merged 38 commits from gsd/phase-18-auto-timezone-detection-and-ability-to-change-timezone into main 2026-06-15 09:55:53 -04:00
2 changed files with 9 additions and 4 deletions
Showing only changes of commit 1f6ad076c1 - Show all commits
+1 -3
View File
@@ -22,9 +22,7 @@ import { appConfig } from '../db/schema.js';
* This is the D-05 single source of truth for the server-side all-day "9 AM local" * This is the D-05 single source of truth for the server-side all-day "9 AM local"
* reminder computation in reminderScheduler.ts and outboxWorker.ts. * reminder computation in reminderScheduler.ts and outboxWorker.ts.
*/ */
export async function getHouseholdTimezone( export async function getHouseholdTimezone(db: MySql2Database<typeof schema>): Promise<string> {
db: MySql2Database<typeof schema>,
): Promise<string> {
const [row] = await db const [row] = await db
.select({ value: appConfig.value }) .select({ value: appConfig.value })
.from(appConfig) .from(appConfig)
+8 -1
View File
@@ -1196,7 +1196,14 @@ describe('runOutboxDrain — Plan 18-03: stored household_timezone drives all-da
end: '2026-06-20', end: '2026-06-20',
reminderLeadMinutes: 1440, reminderLeadMinutes: 1440,
}); });
mockPendingRows = [makeRow({ operation: 'update', calendarObjectUrl: 'https://example.com/event.ics', etag: 'W/"abc"', payload })]; mockPendingRows = [
makeRow({
operation: 'update',
calendarObjectUrl: 'https://example.com/event.ics',
etag: 'W/"abc"',
payload,
}),
];
// Provide etag so WR-02 re-read path resolves (no rawVevent → falls through to all-day branch) // Provide etag so WR-02 re-read path resolves (no rawVevent → falls through to all-day branch)
mockWhereCalEvents.mockResolvedValue([{ etag: 'W/"abc"' }]); mockWhereCalEvents.mockResolvedValue([{ etag: 'W/"abc"' }]);