From 7878651081bacd59c77321349c0e40bfcf075872 Mon Sep 17 00:00:00 2001 From: Liam Lloyd Date: Mon, 29 Jan 2024 15:13:21 -0800 Subject: [PATCH] Use case insensitive email lookup in /admin/account/set_null_subjects This endpoint is a tool for using FusionAuth data to fill in missing subjects in Permanent's database. FusionAuth stores emails in lowercase, while Permanent stores them however the user provided them, so when matching emails from FusionAuth data to Permanent accounts, we must use case-insensitive comparison. --- packages/api/src/admin/controller.test.ts | 15 +++++++++++++++ .../admin/queries/set_null_account_subject.sql | 2 +- .../api/src/fixtures/create_test_accounts.sql | 9 +++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/api/src/admin/controller.test.ts b/packages/api/src/admin/controller.test.ts index 4ff4b27b..ea630ac6 100644 --- a/packages/api/src/admin/controller.test.ts +++ b/packages/api/src/admin/controller.test.ts @@ -318,6 +318,21 @@ describe("set_null_subjects", () => { .expect(200, { updatedAccounts: ["2", "4"], emailsWithErrors: [] }); }); + test("should look up emails case-insensitively", async () => { + const testEmail = "test+4@permanent.org"; + await agent + .post("/api/v2/admin/account/set_null_subjects") + .send({ + accounts: [ + { + email: testEmail, + subject: "5c3473b6-cf2e-4c55-a80e-8db51d1bc5fd", + }, + ], + }) + .expect(200, { updatedAccounts: ["6"], emailsWithErrors: [] }); + }); + test("should call logger.error if database call fails", async () => { const testError = new Error("out of cheese - redo from start"); jest.spyOn(db, "sql").mockRejectedValueOnce(testError); diff --git a/packages/api/src/admin/queries/set_null_account_subject.sql b/packages/api/src/admin/queries/set_null_account_subject.sql index 41b85dea..e11e541e 100644 --- a/packages/api/src/admin/queries/set_null_account_subject.sql +++ b/packages/api/src/admin/queries/set_null_account_subject.sql @@ -3,7 +3,7 @@ account SET subject = :subject WHERE - primaryemail = :email + LOWER(primaryemail) = LOWER(:email) AND status = 'status.auth.ok' AND subject IS NULL RETURNING diff --git a/packages/api/src/fixtures/create_test_accounts.sql b/packages/api/src/fixtures/create_test_accounts.sql index 7dbcc9ad..0659bd1c 100644 --- a/packages/api/src/fixtures/create_test_accounts.sql +++ b/packages/api/src/fixtures/create_test_accounts.sql @@ -44,4 +44,13 @@ VALUES 'type.account.standard', 'Jenny Rando', null +), +( + 6, + 'TEST+4@permanent.org', + 'status.auth.ok', + '{}', + 'type.account.standard', + 'Jenny Rando', + null );