Skip to content

Commit

Permalink
Merge pull request #838 from eisbuk/feature/sms-templates
Browse files Browse the repository at this point in the history
Feature/sms templates
  • Loading branch information
silviot authored Sep 25, 2023
2 parents 4ab6604 + 5bcfcf2 commit 99b148f
Show file tree
Hide file tree
Showing 43 changed files with 1,137 additions and 649 deletions.
2 changes: 2 additions & 0 deletions packages/client/src/__testSetup__/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
Collection,
OrganizationData,
defaultEmailTemplates as emailTemplates,
defaultSMSTemplates as smsTemplates,
} from "@eisbuk/shared";

import { adminDb, auth } from "./firestoreSetup";
Expand Down Expand Up @@ -48,6 +49,7 @@ export const setUpOrganization: SetUpOrganization = async ({
admins: [email],
emailFrom,
emailTemplates,
smsTemplates,
...additionalSetup,
};

Expand Down
38 changes: 19 additions & 19 deletions packages/client/src/__tests__/cloudFunctions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ import { describe, expect } from "vitest";
import {
HTTPSErrors,
BookingsErrors,
ClientEmailPayload,
EmailType,
ClientMessagePayload,
ClientMessageType,
sanitizeCustomer,
CustomerBase,
Collection,
Customer,
DeliveryQueue,
ClientMessageMethod,
} from "@eisbuk/shared";
import { CloudFunction } from "@eisbuk/shared/ui";

Expand Down Expand Up @@ -53,7 +54,7 @@ describe("Cloud functions", () => {
async () => {
const { organization } = await setUpOrganization({ doLogin: false });
const payload = {
type: EmailType.SendBookingsLink,
type: ClientMessageType.SendBookingsLink,
organization,
displayName: "displayName",
bookingsLink: "bookingsLink",
Expand Down Expand Up @@ -81,14 +82,12 @@ describe("Cloud functions", () => {
},
});
const payload = {
type: EmailType.SendBookingsLink,
type: ClientMessageType.SendBookingsLink,
organization,
bookingsLink: "bookingsLink",
customer: {
name: saul.name,
surname: saul.surname,
email: saul.email,
},
name: saul.name,
surname: saul.surname,
email: saul.email,
};
await expect(
httpsCallable(functions, CloudFunction.SendEmail)(payload)
Expand Down Expand Up @@ -135,19 +134,20 @@ describe("Cloud functions", () => {
expect(Boolean(bookingsSnap.data())).toEqual(true);
});

const payload: ClientEmailPayload[EmailType.SendCalendarFile] = {
type: EmailType.SendCalendarFile,
const payload: ClientMessagePayload<
ClientMessageMethod.Email,
ClientMessageType.SendCalendarFile
> = {
type: ClientMessageType.SendCalendarFile,
organization,
attachments: {
filename: "icsFile.ics",
content: "content",
},
customer: {
name: saul.name,
surname: saul.surname,
email: saul.email || "[email protected]",
secretKey: saul.secretKey,
},
name: saul.name,
surname: saul.surname,
email: saul.email || "[email protected]",
secretKey: saul.secretKey,
};
await expect(
httpsCallable(functions, CloudFunction.SendEmail)(payload)
Expand All @@ -163,7 +163,7 @@ describe("Cloud functions", () => {
"should reject if no value for organziation provided",
async () => {
const payload = {
type: EmailType.SendBookingsLink,
type: ClientMessageType.SendBookingsLink,
displayName: "displayName",
bookingsLink: "string",
customer: {
Expand All @@ -181,7 +181,7 @@ describe("Cloud functions", () => {
testWithEmulator("should reject if no recipient provided", async () => {
const { organization } = await setUpOrganization();
const payload = {
type: EmailType.SendBookingsLink,
type: ClientMessageType.SendBookingsLink,
organization,
bookingsLink: "string",
customer: {
Expand Down
7 changes: 4 additions & 3 deletions packages/client/src/__tests__/dataTriggers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import {
SlotType,
OrganizationData,
sanitizeCustomer,
defaultEmailTemplates,
defaultEmailTemplates as emailTemplates,
defaultSMSTemplates as smsTemplates,
} from "@eisbuk/shared";

import { saul, walt } from "@eisbuk/testing/customers";
Expand Down Expand Up @@ -398,10 +399,10 @@ describe("Cloud functions -> Data triggers ->", () => {
location: "Albuquerque",
admins: ["Gus Fring"],
emailFrom: "[email protected]",
emailTemplates: defaultEmailTemplates,
emailTemplates,
emailNameFrom: "Gus",
smsFrom: "Gus",
smsTemplate: "SMS Temp here",
smsTemplates,
existingSecrets: ["authToken", "exampleSecret"],
emailBcc: "[email protected]",
};
Expand Down
16 changes: 12 additions & 4 deletions packages/client/src/__tests__/integrations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ import { describe, expect, beforeEach, afterAll } from "vitest";
import { httpsCallable } from "@firebase/functions";
import { createJestSMTPServer } from "jest-smtp";

import { ClientEmailPayload, CustomerFull, EmailType } from "@eisbuk/shared";
import {
ClientMessageMethod,
ClientMessagePayload,
ClientMessageType,
CustomerFull,
} from "@eisbuk/shared";
import { CloudFunction } from "@eisbuk/shared/ui";
import { DeliveryStatus } from "@eisbuk/firestore-process-delivery";

Expand Down Expand Up @@ -52,10 +57,13 @@ describe.skip("Email sending and delivery", () => {
done();
};

const payload: ClientEmailPayload[EmailType.SendBookingsLink] = {
type: EmailType.SendBookingsLink,
const payload: ClientMessagePayload<
ClientMessageMethod.Email,
ClientMessageType.SendBookingsLink
> = {
type: ClientMessageType.SendBookingsLink,
organization,
customer: saul as Required<CustomerFull>,
...(saul as Required<CustomerFull>),
bookingsLink: "https://eisbuk.it/saul",
};

Expand Down
46 changes: 28 additions & 18 deletions packages/client/src/__tests__/sendEmail.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ import { describe, expect, test } from "vitest";
import { httpsCallable } from "@firebase/functions";

import {
ClientEmailPayload,
EmailType,
ClientMessagePayload,
ClientMessageType,
interpolateText,
defaultEmailTemplates,
defaultEmailTemplates as emailTemplates,
EmailInterpolationValues,
ClientMessageMethod,
} from "@eisbuk/shared";
import { CloudFunction } from "@eisbuk/shared/ui";

Expand All @@ -17,23 +18,32 @@ import { adminDb, functions } from "@/__testSetup__/firestoreSetup";

type SendEmailTest =
| {
type: EmailType.SendBookingsLink;
type: ClientMessageType.SendBookingsLink;
payload: Pick<
ClientEmailPayload[EmailType.SendBookingsLink],
ClientMessagePayload<
ClientMessageMethod.Email,
ClientMessageType.SendBookingsLink
>,
"bookingsLink"
>;
}
| {
type: EmailType.SendCalendarFile;
type: ClientMessageType.SendCalendarFile;
payload: Pick<
ClientEmailPayload[EmailType.SendCalendarFile],
ClientMessagePayload<
ClientMessageMethod.Email,
ClientMessageType.SendCalendarFile
>,
"attachments"
>;
}
| {
type: EmailType.SendExtendedBookingsDate;
type: ClientMessageType.SendExtendedBookingsDate;
payload: Pick<
ClientEmailPayload[EmailType.SendExtendedBookingsDate],
ClientMessagePayload<
ClientMessageMethod,
ClientMessageType.SendExtendedBookingsDate
>,
"extendedBookingsDate" | "bookingsMonth"
>;
};
Expand Down Expand Up @@ -69,7 +79,7 @@ const runSendEmailTableTests = (tests: SendEmailTest[]) => {
>(
functions,
CloudFunction.SendEmail
)({ type, ...payload, organization, customer: saul });
)({ type, ...payload, organization, ...saul });

expect(success).toEqual(true);

Expand All @@ -85,17 +95,17 @@ const runSendEmailTableTests = (tests: SendEmailTest[]) => {
};

// In case of send bookings link, add bookings link specific interpolation values
if (type === EmailType.SendBookingsLink) {
if (type === ClientMessageType.SendBookingsLink) {
interpolationValues.bookingsLink = payload.bookingsLink;
}

// In case of send calendar file, add calendar file specific interpolation values
if (type === EmailType.SendCalendarFile) {
if (type === ClientMessageType.SendCalendarFile) {
interpolationValues.calendarFile = payload.attachments.filename;
}

// In case of send extended bookings date, add extended bookings date specific interpolation values
if (type === EmailType.SendExtendedBookingsDate) {
if (type === ClientMessageType.SendExtendedBookingsDate) {
interpolationValues.bookingsMonth = payload.bookingsMonth;
interpolationValues.extendedBookingsDate = payload.extendedBookingsDate;
}
Expand All @@ -111,11 +121,11 @@ const runSendEmailTableTests = (tests: SendEmailTest[]) => {
// We're using default templates for each email type and checking against interpolation values
// provided in the test payload
subject: interpolateText(
defaultEmailTemplates[type].subject,
emailTemplates[type].subject,
interpolationValues
),
html: interpolateText(
defaultEmailTemplates[type].html,
emailTemplates[type].html,
interpolationValues
),
}),
Expand All @@ -128,13 +138,13 @@ const runSendEmailTableTests = (tests: SendEmailTest[]) => {
describe("SendEmail", () =>
runSendEmailTableTests([
{
type: EmailType.SendBookingsLink,
type: ClientMessageType.SendBookingsLink,
payload: {
bookingsLink: "https://eisbuk.com/bookings",
},
},
{
type: EmailType.SendCalendarFile,
type: ClientMessageType.SendCalendarFile,
payload: {
attachments: {
filename: "calendar.ics",
Expand All @@ -143,7 +153,7 @@ describe("SendEmail", () =>
},
},
{
type: EmailType.SendExtendedBookingsDate,
type: ClientMessageType.SendExtendedBookingsDate,
payload: {
bookingsMonth: "2021-01",
extendedBookingsDate: "2021-01-31",
Expand Down
Loading

0 comments on commit 99b148f

Please sign in to comment.