Skip to content

Commit 4abe610

Browse files
committed
CCM-10004: merge
2 parents 6ab3817 + 55eb581 commit 4abe610

File tree

2 files changed

+53
-28
lines changed

2 files changed

+53
-28
lines changed

utils/utils/src/__tests__/email-client.test.ts

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ describe('EmailClient', () => {
198198

199199
await client.sendTemplateSubmittedEmailToSuppliers(mockTemplate);
200200

201-
expect(sesClient.send).toHaveBeenCalledTimes(2);
201+
expect(sesClient.send).toHaveBeenCalledTimes(3);
202202
expect(sesClient.send).toHaveBeenCalledWith(
203203
expect.any(SendRawEmailCommand)
204204
);
@@ -211,27 +211,49 @@ describe('EmailClient', () => {
211211

212212
const supplier1EmailContent =
213213
sesCall1Input.input.RawMessage?.Data?.toString();
214+
214215
expect(supplier1EmailContent).toContain(expandedTemplateId);
216+
expect(supplier1EmailContent).toContain(recipientEmails.supplier1[0]);
215217
expect(supplier1EmailContent).toContain('template-name');
216218
expect(supplier1EmailContent).toContain('supplier1');
217219
expect(supplier1EmailContent).not.toContain('supplier2');
218220
expect(supplier1EmailContent).toContain('proof1.pdf');
219221
expect(supplier1EmailContent).not.toContain('proof2.pdf');
220222

221-
// check email to supplier2
223+
// check emails to supplier2
222224
const sesCall2Input = sesClient.send.mock.calls[1][0];
223225
if (!(sesCall2Input instanceof SendRawEmailCommand)) {
224226
throw new TypeError('Unexpected command given to SES client');
225227
}
226228

227-
const supplier2EmailContent =
229+
const supplier2Recipient1EmailContent =
228230
sesCall2Input.input.RawMessage?.Data?.toString();
229-
expect(supplier2EmailContent).toContain(expandedTemplateId);
230-
expect(supplier2EmailContent).toContain('template-name');
231-
expect(supplier2EmailContent).not.toContain('supplier1');
232-
expect(supplier2EmailContent).toContain('supplier2');
233-
expect(supplier2EmailContent).not.toContain('proof1.pdf');
234-
expect(supplier2EmailContent).toContain('proof2.pdf');
231+
expect(supplier2Recipient1EmailContent).toContain(expandedTemplateId);
232+
expect(supplier2Recipient1EmailContent).toContain(
233+
recipientEmails.supplier2[0]
234+
);
235+
expect(supplier2Recipient1EmailContent).toContain('template-name');
236+
expect(supplier2Recipient1EmailContent).not.toContain('supplier1');
237+
expect(supplier2Recipient1EmailContent).toContain('supplier2');
238+
expect(supplier2Recipient1EmailContent).not.toContain('proof1.pdf');
239+
expect(supplier2Recipient1EmailContent).toContain('proof2.pdf');
240+
241+
const sesCall3Input = sesClient.send.mock.calls[2][0];
242+
if (!(sesCall3Input instanceof SendRawEmailCommand)) {
243+
throw new TypeError('Unexpected command given to SES client');
244+
}
245+
246+
const supplier2Recipient2EmailContent =
247+
sesCall3Input.input.RawMessage?.Data?.toString();
248+
expect(supplier2Recipient2EmailContent).toContain(expandedTemplateId);
249+
expect(supplier2Recipient2EmailContent).toContain(
250+
recipientEmails.supplier2[1]
251+
);
252+
expect(supplier2Recipient2EmailContent).toContain('template-name');
253+
expect(supplier2Recipient2EmailContent).not.toContain('supplier1');
254+
expect(supplier2Recipient2EmailContent).toContain('supplier2');
255+
expect(supplier2Recipient2EmailContent).not.toContain('proof1.pdf');
256+
expect(supplier2Recipient2EmailContent).toContain('proof2.pdf');
235257
});
236258
});
237259
});

utils/utils/src/email-client.ts

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable security/detect-non-literal-fs-filename */
2-
import { createMimeMessage, MailboxAddrObject } from 'mimetext';
2+
import { createMimeMessage } from 'mimetext';
33
import { SESClient, SendRawEmailCommand } from '@aws-sdk/client-ses';
44
import { TemplateDto } from 'nhs-notify-backend-client';
55
import { Logger } from 'nhs-notify-web-template-management-utils/logger';
@@ -86,27 +86,30 @@ export class EmailClient {
8686
return;
8787
}
8888

89-
const msg = createMimeMessage();
90-
msg.setSender({ name: 'NHS Notify', addr: this.senderEmail });
89+
return Promise.all(
90+
recipientEmailsForSupplier.map(async (recipientEmail) => {
91+
const msg = createMimeMessage();
9192

92-
const recipients: MailboxAddrObject[] = recipientEmailsForSupplier.map(
93-
(emailAddress) => ({ addr: emailAddress, type: 'Bcc' })
94-
);
95-
msg.setTo(recipients, { type: 'Bcc' });
96-
msg.setSubject(subject);
97-
msg.addMessage({
98-
contentType: 'text/html',
99-
data: emailContent,
100-
});
93+
msg.setSender({ name: 'NHS Notify', addr: this.senderEmail });
10194

102-
const command = new SendRawEmailCommand({
103-
RawMessage: {
104-
Data: Buffer.from(msg.asRaw()),
105-
},
106-
});
95+
msg.setRecipient(recipientEmail);
96+
msg.setSubject(subject);
10797

108-
const res = await this.sesClient.send(command);
109-
this.logger.info(res);
98+
msg.addMessage({
99+
contentType: 'text/html',
100+
data: emailContent,
101+
});
102+
103+
const command = new SendRawEmailCommand({
104+
RawMessage: {
105+
Data: Buffer.from(msg.asRaw()),
106+
},
107+
});
108+
109+
const res = await this.sesClient.send(command);
110+
this.logger.info(res);
111+
})
112+
);
110113
}
111114

112115
async sendProofRequestedEmailToSupplier(

0 commit comments

Comments
 (0)