2026-07-07 22:31:02 -05:00
|
|
|
"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);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
2026-07-11 16:39:59 -05:00
|
|
|
// 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
|
|
|
|
|
});
|
|
|
|
|
});
|
2026-07-07 22:31:02 -05:00
|
|
|
//# sourceMappingURL=assignDailyQuestion.test.js.map
|