Phase 18: Auto timezone detection and ability to change timezone #21
@@ -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)
|
||||||
|
|||||||
@@ -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"' }]);
|
||||||
|
|||||||
Reference in New Issue
Block a user