From 1c46a9828f247603718c0c85627061f082b88f06 Mon Sep 17 00:00:00 2001 From: Sergiy Dybskiy Date: Mon, 5 Oct 2026 23:10:26 -0400 Subject: [PATCH] Add a grace period to the refund window Co-authored-by: Claude --- .../demo-pr/checkout-flow.integration.test.ts | 6 +++--- .../fixtures/demo-pr/refund-window.test.ts | 16 ++++++++++++---- .../fixtures/demo-pr/refund-window.ts | 5 ++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/pr-reviewer/fixtures/demo-pr/checkout-flow.integration.test.ts b/apps/pr-reviewer/fixtures/demo-pr/checkout-flow.integration.test.ts index 6f597a6..a773b63 100644 --- a/apps/pr-reviewer/fixtures/demo-pr/checkout-flow.integration.test.ts +++ b/apps/pr-reviewer/fixtures/demo-pr/checkout-flow.integration.test.ts @@ -18,10 +18,10 @@ describe('checkout flow', () => { await settle(); }); - it('refund window closes after 30 days', async () => { + it('refund window closes after the grace period', async () => { const now = new Date('2026-10-01T12:00:00Z'); - expect(canRefund(new Date(now.getTime() - 30 * DAY_MS), now)).toBe(true); - expect(canRefund(new Date(now.getTime() - 31 * DAY_MS), now)).toBe(false); + expect(canRefund(new Date(now.getTime() - 32 * DAY_MS), now)).toBe(true); + expect(canRefund(new Date(now.getTime() - 33 * DAY_MS), now)).toBe(false); await settle(); }); diff --git a/apps/pr-reviewer/fixtures/demo-pr/refund-window.test.ts b/apps/pr-reviewer/fixtures/demo-pr/refund-window.test.ts index 78016d9..0bdf378 100644 --- a/apps/pr-reviewer/fixtures/demo-pr/refund-window.test.ts +++ b/apps/pr-reviewer/fixtures/demo-pr/refund-window.test.ts @@ -26,12 +26,20 @@ describe('canRefund', () => { expect(canRefund(daysAgo(30), now)).toBe(true); }); - it('refuses a refund one millisecond past 30 days', () => { - expect(canRefund(new Date(daysAgo(30).getTime() - 1), now)).toBe(false); + it('allows a refund during the 2-day grace period', () => { + expect(canRefund(daysAgo(31), now)).toBe(true); }); - it('refuses a refund after 31 days', () => { - expect(canRefund(daysAgo(31), now)).toBe(false); + it('allows a refund exactly 32 days after delivery', () => { + expect(canRefund(daysAgo(32), now)).toBe(true); + }); + + it('refuses a refund one millisecond past the grace period', () => { + expect(canRefund(new Date(daysAgo(32).getTime() - 1), now)).toBe(false); + }); + + it('refuses a refund after 33 days', () => { + expect(canRefund(daysAgo(33), now)).toBe(false); }); it('refuses a refund after a year', () => { diff --git a/apps/pr-reviewer/fixtures/demo-pr/refund-window.ts b/apps/pr-reviewer/fixtures/demo-pr/refund-window.ts index f328b84..c86759b 100644 --- a/apps/pr-reviewer/fixtures/demo-pr/refund-window.ts +++ b/apps/pr-reviewer/fixtures/demo-pr/refund-window.ts @@ -1,4 +1,7 @@ +const REFUND_WINDOW_DAYS = 30; +const GRACE_PERIOD_DAYS = 2; + export function canRefund(deliveredAt: Date, now = new Date()): boolean { const days = (now.getTime() - deliveredAt.getTime()) / 86_400_000; - return days <= 30; + return days <= REFUND_WINDOW_DAYS + GRACE_PERIOD_DAYS; }