"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const assignDailyQuestion_1 = require("./assignDailyQuestion"); // DST regression tests for the Chicago date helpers (the old hardcoded -6 offset // mislabeled dates and shifted reveal times during the ~8 CDT months). describe('Chicago date helpers (DST-safe)', () => { it('labels a summer (CDT, UTC-5) evening with the correct local date', () => { // 2026-07-08T03:30Z == 2026-07-07 22:30 CDT — the old -6 math said "07-07" too, // but 2026-07-08T04:30Z == 2026-07-07 23:30 CDT is where they diverge: expect((0, assignDailyQuestion_1.formatCstDate)(new Date('2026-07-08T03:30:00Z'))).toBe('2026-07-07'); // 23:30 CDT is still Jul 7 locally; hardcoded -6 called it Jul 7 22:30 → same date, // but 2026-07-08T05:30Z == Jul 8 00:30 CDT; old math: Jul 7 23:30 → WRONG date. expect((0, assignDailyQuestion_1.formatCstDate)(new Date('2026-07-08T05:30:00Z'))).toBe('2026-07-08'); }); it('labels a winter (CST, UTC-6) instant correctly', () => { // 2026-01-08T05:30Z == 2026-01-07 23:30 CST expect((0, assignDailyQuestion_1.formatCstDate)(new Date('2026-01-08T05:30:00Z'))).toBe('2026-01-07'); expect((0, assignDailyQuestion_1.formatCstDate)(new Date('2026-01-08T06:30:00Z'))).toBe('2026-01-08'); }); it('parses midnight Chicago with the seasonal offset', () => { // Summer: midnight CDT == 05:00Z expect((0, assignDailyQuestion_1.parseCstDate)('2026-07-07').toISOString()).toBe('2026-07-07T05:00:00.000Z'); // Winter: midnight CST == 06:00Z expect((0, assignDailyQuestion_1.parseCstDate)('2026-01-07').toISOString()).toBe('2026-01-07T06:00:00.000Z'); }); it('puts the 6 PM reveal at 6 PM local in both seasons', () => { // Summer: 18:00 CDT == 23:00Z expect((0, assignDailyQuestion_1.timestampAt6PmCst)('2026-07-07').toDate().toISOString()).toBe('2026-07-07T23:00:00.000Z'); // Winter: 18:00 CST == 00:00Z next day expect((0, assignDailyQuestion_1.timestampAt6PmCst)('2026-01-07').toDate().toISOString()).toBe('2026-01-08T00:00:00.000Z'); }); it('round-trips format(parse(d)) across the spring-forward boundary', () => { for (const day of ['2026-03-07', '2026-03-08', '2026-03-09', '2026-11-01', '2026-11-02']) { expect((0, assignDailyQuestion_1.formatCstDate)((0, assignDailyQuestion_1.parseCstDate)(day))).toBe(day); } }); }); // Wildcard cadence must mirror the client's DailyModeResolver (dayOfYear % 10 === 3), or the // server would assign a weekday question on days the app themes "Wildcard" (and vice versa). describe('wildcard-day cadence (mirrors client DailyModeResolver)', () => { it('computes 1-based day-of-year like Calendar.DAY_OF_YEAR', () => { expect((0, assignDailyQuestion_1.dayOfYearUtc)('2026-01-01')).toBe(1); expect((0, assignDailyQuestion_1.dayOfYearUtc)('2026-01-03')).toBe(3); expect((0, assignDailyQuestion_1.dayOfYearUtc)('2026-02-01')).toBe(32); expect((0, assignDailyQuestion_1.dayOfYearUtc)('2026-12-31')).toBe(365); // 2026 is not a leap year expect((0, assignDailyQuestion_1.dayOfYearUtc)('2028-12-31')).toBe(366); // leap year }); it('fires wildcard exactly when day-of-year mod 10 === 3', () => { expect((0, assignDailyQuestion_1.isWildcardDay)('2026-01-03')).toBe(true); // doy 3 expect((0, assignDailyQuestion_1.isWildcardDay)('2026-01-13')).toBe(true); // doy 13 expect((0, assignDailyQuestion_1.isWildcardDay)('2026-02-01')).toBe(false); // doy 32 expect((0, assignDailyQuestion_1.isWildcardDay)('2026-01-01')).toBe(false); // doy 1 expect((0, assignDailyQuestion_1.isWildcardDay)('2026-01-04')).toBe(false); // doy 4 }); it('flags ~10% of the year as wildcard days', () => { let wild = 0; for (let doy = 1; doy <= 365; doy++) { const d = new Date(Date.UTC(2026, 0, doy)); const dateStr = d.toISOString().slice(0, 10); if ((0, assignDailyQuestion_1.isWildcardDay)(dateStr)) wild++; } expect(wild).toBe(36); // doy ∈ {3,13,…,363} → 36 days }); }); //# sourceMappingURL=assignDailyQuestion.test.js.map