Skip to content

Commit

Permalink
feat: removes a/b match email experiment, defaults to old email
Browse files Browse the repository at this point in the history
  • Loading branch information
vivianedias committed Sep 25, 2024
1 parent 3ae2751 commit 7663d0f
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 187 deletions.
11 changes: 0 additions & 11 deletions src/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,3 @@ export const TRANSACTIONAL_EMAIL_IDS = {
volunteer: "clv43jw1t00yj79ezuug2kh6z",
},
};

export const AB_TRANSACTIONAL_EMAIL_IDS = {
psychological: {
a: "clv4977jg01a7hlj1twd22zq1",
b: "clwzfi9kh004wgsdbs5jb530d",
},
legal: {
a: "clv43f8gd02evj3woijkqcgng",
b: "clwzfhnp50015494n4nnhc7qa",
},
};
38 changes: 0 additions & 38 deletions src/emailClient/__tests__/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ import {
sendEmailSocialWorker,
sendEmailToMsr,
sendEmailToVolunteer,
getAbTransactionalEmailId,
} from "..";
import * as sendEmail from "../../emailClient/sendEmail";
import { AB_TRANSACTIONAL_EMAIL_IDS } from "../../constants";

const sendEmailMock = jest.spyOn(sendEmail, "default");
const msr = {
Expand Down Expand Up @@ -166,39 +164,3 @@ describe("sendEmailToVolunteer", () => {
});
});
});

describe("getAbTransactionalEmailId group A", () => {
beforeEach(() => {
jest.spyOn(global.Math, "random").mockReturnValue(0.5);
});
it("should return transacitonalId from legal email A", () => {
const transactionalId = getAbTransactionalEmailId("legal");
expect(transactionalId).toStrictEqual(
AB_TRANSACTIONAL_EMAIL_IDS["legal"]["a"]
);
});
it("should return transacitonalId from psychological email A", () => {
const transactionalId = getAbTransactionalEmailId("psychological");
expect(transactionalId).toStrictEqual(
AB_TRANSACTIONAL_EMAIL_IDS["psychological"]["a"]
);
});
});

describe("getAbTransactionalEmailId group B", () => {
beforeEach(() => {
jest.spyOn(global.Math, "random").mockReturnValue(0.6);
});
it("should return transacitonalId from legal email B", () => {
const transactionalId = getAbTransactionalEmailId("legal");
expect(transactionalId).toStrictEqual(
AB_TRANSACTIONAL_EMAIL_IDS["legal"]["b"]
);
});
it("should return transacitonalId from psychological email B", () => {
const transactionalId = getAbTransactionalEmailId("psychological");
expect(transactionalId).toStrictEqual(
AB_TRANSACTIONAL_EMAIL_IDS["psychological"]["b"]
);
});
});
17 changes: 1 addition & 16 deletions src/emailClient/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import type { Volunteers } from "@prisma/client";
import sendEmail from "./sendEmail";
import { getFirstName } from "../utils";
import {
AB_TRANSACTIONAL_EMAIL_IDS,
TRANSACTIONAL_EMAIL_IDS,
} from "../constants";
import { TRANSACTIONAL_EMAIL_IDS } from "../constants";
import type { SupportRequest, ZendeskTicket, ZendeskUser } from "../types";

type Volunteer = Pick<
Expand All @@ -15,18 +12,6 @@ type Volunteer = Pick<
type Msr = Pick<ZendeskUser, "name" | "email"> &
Pick<SupportRequest, "zendeskTicketId">;

export function getAbTransactionalEmailId(
supportType: SupportRequest["supportType"]
): string {
const randomNum = Math.random();

if (randomNum <= 0.5) {
return AB_TRANSACTIONAL_EMAIL_IDS[supportType]["a"];
}

return AB_TRANSACTIONAL_EMAIL_IDS[supportType]["b"];
}

export async function sendEmailToMsr(
msr: Msr,
volunteer: Volunteer,
Expand Down
79 changes: 16 additions & 63 deletions src/match/__tests__/createAndUpdateZendeskMatchTickets.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ import type { SupportRequest, ZendeskTicket, ZendeskUser } from "../../types";
import * as zendeskClient from "../../zendeskClient";
import * as emailClient from "../../emailClient";
import * as getCurrentDate from "../../utils/getCurrentDate";
import * as saveBusaraABExperiment from "../../utils/saveBusaraABExperiment";
import { prismaMock } from "../../setupTests";
import { AB_TRANSACTIONAL_EMAIL_IDS, AGENT } from "../../constants";
import { AGENT, TRANSACTIONAL_EMAIL_IDS } from "../../constants";

const getCurrentDateMock = jest.spyOn(getCurrentDate, "default");
const createTicketMock = jest.spyOn(zendeskClient, "createTicket");
Expand All @@ -18,10 +17,6 @@ const sendEmailToVolunteerMock = jest.spyOn(
emailClient,
"sendEmailToVolunteer"
);
const saveBusaraABExperimentMock = jest.spyOn(
saveBusaraABExperiment,
"default"
);
jest.spyOn(global.Math, "random").mockReturnValue(0.7);

const mockVolunteerZendeskTicket = {
Expand Down Expand Up @@ -50,7 +45,6 @@ const mockMsrFromZendesk = {
email: "[email protected]",
} as ZendeskUser;
const mockCurrentDate = "2023-12-28";
const mockMatchId = 1;

describe("createAndUpdateZendeskMatchTickets", () => {
getCurrentDateMock.mockImplementation(() => mockCurrentDate);
Expand All @@ -64,8 +58,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
await expect(
createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
)
).rejects.toThrow("Couldn't fetch volunteer from db or msr from zendesk");
});
Expand All @@ -77,8 +70,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
await expect(
createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
)
).rejects.toThrow("Couldn't fetch volunteer from db or msr from zendesk");
});
Expand All @@ -91,8 +83,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
await expect(
createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
)
).rejects.toThrow("Couldn't create volunteer match ticket");
});
Expand All @@ -117,8 +108,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
it("should return correct volunteer zendesk ticket id", async () => {
const volunteerZendeskTicketId = await createAndUpdateZendeskMatchTickets(
legalSupportRequest,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(volunteerZendeskTicketId).toStrictEqual(123123123);
});
Expand Down Expand Up @@ -157,8 +147,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
};
await createAndUpdateZendeskMatchTickets(
legalSupportRequest,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(createTicketMock).toHaveBeenNthCalledWith(1, volunteerTicket);
});
Expand Down Expand Up @@ -193,47 +182,30 @@ describe("createAndUpdateZendeskMatchTickets", () => {
};
await createAndUpdateZendeskMatchTickets(
legalSupportRequest,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(updateTicketMock).toHaveBeenNthCalledWith(1, msrTicket);
});

it("should call send email to MSR with correct params", async () => {
await createAndUpdateZendeskMatchTickets(
legalSupportRequest,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(sendEmailToMsrMock).toHaveBeenCalledWith(
{
...mockMsrFromZendesk,
zendeskTicketId: legalSupportRequest["zendeskTicketId"],
},
mockVolunteerFromDB,
AB_TRANSACTIONAL_EMAIL_IDS["legal"]["b"]
);
});

it("should call saveBusaraABExperiment with correct params", async () => {
await createAndUpdateZendeskMatchTickets(
legalSupportRequest,
mockVolunteerId,
mockMatchId
TRANSACTIONAL_EMAIL_IDS["legal"]["msr"]
);
expect(saveBusaraABExperimentMock).toHaveBeenCalledWith({
msrId: legalSupportRequest.msrId,
supportRequestId: legalSupportRequest.supportRequestId,
transactionalId: AB_TRANSACTIONAL_EMAIL_IDS["legal"]["b"],
matchId: mockMatchId,
});
});

it("should call send email to volunteer with correct params", async () => {
await createAndUpdateZendeskMatchTickets(
legalSupportRequest,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(sendEmailToVolunteerMock).toHaveBeenCalledWith(
{
Expand Down Expand Up @@ -261,8 +233,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
it("should return correct volunteer zendesk ticket id", async () => {
const volunteerZendeskTicketId = await createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(volunteerZendeskTicketId).toStrictEqual(123123123);
});
Expand All @@ -274,8 +245,7 @@ describe("createAndUpdateZendeskMatchTickets", () => {
};
await createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(createTicketMock).toHaveBeenNthCalledWith(
1,
Expand Down Expand Up @@ -313,47 +283,30 @@ describe("createAndUpdateZendeskMatchTickets", () => {
};
await createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(updateTicketMock).toHaveBeenNthCalledWith(1, msrTicket);
});

it("should call send email to MSR with correct params", async () => {
await createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(sendEmailToMsrMock).toHaveBeenCalledWith(
{
...mockMsrFromZendesk,
zendeskTicketId: baseSupportRequestPayload["zendeskTicketId"],
},
mockVolunteerFromDB,
AB_TRANSACTIONAL_EMAIL_IDS["psychological"]["b"]
);
});

it("should call saveBusaraABExperiment with correct params", async () => {
await createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
TRANSACTIONAL_EMAIL_IDS["psychological"]["msr"]
);
expect(saveBusaraABExperimentMock).toHaveBeenCalledWith({
msrId: baseSupportRequestPayload.msrId,
supportRequestId: baseSupportRequestPayload.supportRequestId,
transactionalId: AB_TRANSACTIONAL_EMAIL_IDS["psychological"]["b"],
matchId: mockMatchId,
});
});

it("should call send email to volunteer with correct params", async () => {
await createAndUpdateZendeskMatchTickets(
baseSupportRequestPayload,
mockVolunteerId,
mockMatchId
mockVolunteerId
);
expect(sendEmailToVolunteerMock).toHaveBeenCalledWith(
{
Expand Down
26 changes: 6 additions & 20 deletions src/match/createAndUpdateZendeskMatchTickets.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
import type { VolunteerAvailability, Volunteers } from "@prisma/client";
import client from "../prismaClient";
import { createTicket, getUser, updateTicket } from "../zendeskClient";
import {
getAbTransactionalEmailId,
sendEmailToMsr,
sendEmailToVolunteer,
} from "../emailClient";
import {
getCurrentDate,
getErrorMessage,
saveBusaraABExperiment,
} from "../utils";
import { sendEmailToMsr, sendEmailToVolunteer } from "../emailClient";
import { getCurrentDate, getErrorMessage } from "../utils";
import {
ZENDESK_CUSTOM_FIELDS_DICIO,
VOLUNTEER_SUPPORT_TYPE_DICIO,
ZENDESK_SUBDOMAIN,
AGENT,
TRANSACTIONAL_EMAIL_IDS,
} from "../constants";
import type { SupportRequest, ZendeskTicket, ZendeskUser } from "../types";

Expand Down Expand Up @@ -169,8 +162,7 @@ async function fetchMsrFromZendesk(msrId: bigint) {

export default async function createAndUpdateZendeskMatchTickets(
supportRequest: SupportRequest,
volunteerId: VolunteerAvailability["volunteer_id"],
matchId: number
volunteerId: VolunteerAvailability["volunteer_id"]
) {
const volunteer = await fetchVolunteerFromDB(volunteerId);
const msr = await fetchMsrFromZendesk(supportRequest.msrId);
Expand Down Expand Up @@ -205,7 +197,8 @@ export default async function createAndUpdateZendeskMatchTickets(
msrZendeskTicketId: supportRequest.zendeskTicketId,
});

const transactionalId = getAbTransactionalEmailId(supportRequest.supportType);
const transactionalId =
TRANSACTIONAL_EMAIL_IDS[supportRequest.supportType].msr;

await sendEmailToMsr(
{
Expand All @@ -216,13 +209,6 @@ export default async function createAndUpdateZendeskMatchTickets(
transactionalId
);

await saveBusaraABExperiment({
msrId: supportRequest.msrId,
supportRequestId: supportRequest.supportRequestId,
transactionalId,
matchId,
});

await sendEmailToVolunteer(
{
...volunteer,
Expand Down
3 changes: 1 addition & 2 deletions src/match/createMatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ export async function createMatch(

const volunteerZendeskTicketId = await createAndUpdateZendeskMatchTickets(
supportRequest,
volunteerAvailability["volunteer_id"],
match.matchId
volunteerAvailability["volunteer_id"]
);

await client.matches.update({
Expand Down
1 change: 0 additions & 1 deletion src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,5 @@ export { default as normalizeCity } from "./normalizeCity";
export { default as getCurrentDate } from "./getCurrentDate";
export { default as isProduction } from "./isProduction";
export { default as getFirstName } from "./getFirstName";
export { default as saveBusaraABExperiment } from "./saveBusaraABExperiment";
export { default as notFoundErrorPayload } from "./notFoundErrorPayload";
export * from "./stringfyBigInt";
Loading

0 comments on commit 7663d0f

Please sign in to comment.