mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
8 cases that exercise the schedule-resolution path against a testcontainer Postgres + the canonical recurrence engine + the reminder worker's helper seam: 1. **Bi-weekly RRULE** — `FREQ=WEEKLY;INTERVAL=2;BYDAY=WE` anchored on a known Wednesday emits week 1, skips week 2, emits week 3. Pins the pre-existing worker bug closed. 2. **Monthly** — `FREQ=MONTHLY;BYMONTHDAY=1` emits 3 first-of-month slots across a 3-month window; in-between days don't fire. 3. **Quarterly** — `FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=15` emits 3 slots across 9 months; off-quarter months don't fire. 4. **Rolling** — `rollingIntervalDays = 7`. Initial intake on day 0 targets day 7 as the next slot; an earlier intake on day 5 re-anchors to day 12, not day 14. Rolling emits only the immediately-next slot; past rolling occurrences are historical intake events, not predictable forward slots. 5. **One-shot lifecycle** — a take flips `medication.active` to false; a skip leaves it true. 6. **endsOn cap** — a daily schedule with `endsOn = today + 3d` emits 4 slots (today + day1 + day2 + day3); day 4+ skip. 7. **Legacy fallback** — a row with `rrule = null`, `daysOfWeek = "i2;3"` behaves the same as the explicit RRULE bi-weekly Wednesday case. Proves the engine's legacy path closes the worker bug for pre-v1.5 rows too — covers tenants that haven't been backfilled (defensive). 8. **One-shot skipped intake** — separate case verifying that skipping a one-shot does NOT auto-deactivate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>