From 06542073a5b4b78a167be5167ec3529bfe36234b Mon Sep 17 00:00:00 2001 From: Tom Pretty Date: Wed, 17 Nov 2021 15:24:06 +0000 Subject: [PATCH] only cancel future reminders --- src/cancel-reminders/lib/db.test.ts | 23 +++++++++++++++++++++- src/cancel-reminders/lib/db.ts | 8 +++++--- src/{next-reminders => }/lib/utils.test.ts | 0 src/{next-reminders => }/lib/utils.ts | 0 src/next-reminders/lib/db.ts | 2 +- 5 files changed, 28 insertions(+), 5 deletions(-) rename src/{next-reminders => }/lib/utils.test.ts (100%) rename src/{next-reminders => }/lib/utils.ts (100%) diff --git a/src/cancel-reminders/lib/db.test.ts b/src/cancel-reminders/lib/db.test.ts index 8ff7f68..75c5631 100644 --- a/src/cancel-reminders/lib/db.test.ts +++ b/src/cancel-reminders/lib/db.test.ts @@ -38,6 +38,8 @@ const writeRecurringReminderAndGetCode = async ( }; describe('cancelPendingReminders', () => { + const now = new Date('2021-01-01'); + it('cancels all pending one-off reminders', async () => { expect.assertions(1); @@ -53,11 +55,29 @@ describe('cancelPendingReminders', () => { const cancelledReminders = await cancelPendingSignups( reminderCode, pool, + now, ); expect(cancelledReminders).toBe(2); }); + it('doesnt cancel reminders that have already been sent', async () => { + expect.assertions(1); + + const reminder = createOneOffReminder({ + reminder_period: '2020-12-01', + }); + const reminderCode = await writeOneOffReminderAndGetCode(reminder); + + const cancelledReminders = await cancelPendingSignups( + reminderCode, + pool, + now, + ); + + expect(cancelledReminders).toBe(0); + }); + it('doesnt cancel reminders that have already been cancelled', async () => { expect.assertions(1); @@ -65,7 +85,7 @@ describe('cancelPendingReminders', () => { reminder_period: '2021-01-01', }); const reminderCode = await writeOneOffReminderAndGetCode(r1); - await cancelPendingSignups(reminderCode, pool); + await cancelPendingSignups(reminderCode, pool, now); const r2 = createOneOffReminder({ reminder_period: '2021-02-01', @@ -75,6 +95,7 @@ describe('cancelPendingReminders', () => { const cancelledReminders = await cancelPendingSignups( reminderCode, pool, + now, ); expect(cancelledReminders).toBe(1); diff --git a/src/cancel-reminders/lib/db.ts b/src/cancel-reminders/lib/db.ts index e6a0d55..1f48619 100644 --- a/src/cancel-reminders/lib/db.ts +++ b/src/cancel-reminders/lib/db.ts @@ -1,5 +1,6 @@ import { Pool, QueryConfig } from 'pg'; import { runWithLogging } from '../../lib/db'; +import { getCurrentReminderPeriod } from '../../lib/utils'; async function getIdentityIdForReminderCode( reminderCode: string, @@ -40,11 +41,11 @@ async function getIdentityIdForReminderCode( export async function cancelPendingSignups( reminderCode: string, pool: Pool, + now: Date = new Date(), ): Promise { - const now = new Date(); - // Find the signup for the given reminder_code, then use the identity_id to cancel all reminders for that user const identityId = await getIdentityIdForReminderCode(reminderCode, pool); + const reminderPeriod = getCurrentReminderPeriod(now); if (identityId !== null) { const oneOffQuery: QueryConfig = { @@ -56,8 +57,9 @@ export async function cancelPendingSignups( WHERE identity_id = $2 AND reminder_cancelled_at IS NULL + AND DATE(reminder_period) >= Date($3) `, - values: [now.toISOString(), identityId], + values: [now.toISOString(), identityId, reminderPeriod], }; const recurringQuery: QueryConfig = { diff --git a/src/next-reminders/lib/utils.test.ts b/src/lib/utils.test.ts similarity index 100% rename from src/next-reminders/lib/utils.test.ts rename to src/lib/utils.test.ts diff --git a/src/next-reminders/lib/utils.ts b/src/lib/utils.ts similarity index 100% rename from src/next-reminders/lib/utils.ts rename to src/lib/utils.ts diff --git a/src/next-reminders/lib/db.ts b/src/next-reminders/lib/db.ts index 9c73496..e5539f5 100644 --- a/src/next-reminders/lib/db.ts +++ b/src/next-reminders/lib/db.ts @@ -1,6 +1,6 @@ import { Pool, QueryConfig, QueryResult } from 'pg'; import { runWithLogging } from '../../lib/db'; -import { getCurrentReminderPeriod } from './utils'; +import { getCurrentReminderPeriod } from '../../lib/utils'; export function getNextReminders( pool: Pool,