import type { EmailSenderArgs } from '../../../../../../src/identity/interaction/email-password/util/BaseEmailSender'; import { BaseEmailSender } from '../../../../../../src/identity/interaction/email-password/util/BaseEmailSender'; import type { EmailArgs } from '../../../../../../src/identity/interaction/email-password/util/EmailSender'; jest.mock('nodemailer'); describe('A BaseEmailSender', (): void => { let constructorArgs: EmailSenderArgs; const recipient = 'test@test.com'; const args: EmailArgs = { recipient, subject: 'subject!', text: 'text!', html: '' }; let sendMail: jest.Mock; beforeEach(async(): Promise => { constructorArgs = { emailConfig: { host: 'smtp.example.email', port: 587, auth: { user: 'alice@example.email', pass: 'NYEaCsqV7aVStRCbmC', }, }, }; sendMail = jest.fn(); const nodemailer = jest.requireMock('nodemailer'); Object.assign(nodemailer, { createTransport: (): any => ({ sendMail }) }); }); it('sends a mail with the given settings.', async(): Promise => { constructorArgs.senderName = 'My Solid Server'; const sender = new BaseEmailSender(constructorArgs); await expect(sender.handleSafe(args)).resolves.toBeUndefined(); expect(sendMail).toHaveBeenCalledTimes(1); expect(sendMail).toHaveBeenLastCalledWith({ from: 'My Solid Server', to: recipient, subject: args.subject, text: args.text, html: args.html, }); }); it('defaults to the name Solid if none is provided.', async(): Promise => { const sender = new BaseEmailSender(constructorArgs); await expect(sender.handleSafe(args)).resolves.toBeUndefined(); expect(sendMail).toHaveBeenCalledTimes(1); expect(sendMail).toHaveBeenLastCalledWith({ from: 'Solid', to: recipient, subject: args.subject, text: args.text, html: args.html, }); }); });