From c6863d6e64642c59fb9794aab9657393545d7ecb Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 12 Jan 2022 11:02:49 +0100 Subject: [PATCH] sendAccountActivationEmail in separate file --- .../graphql/resolver/TransactionResolver.ts | 1 - .../src/graphql/resolver/UserResolver.test.ts | 4 +-- backend/src/graphql/resolver/UserResolver.ts | 4 +-- .../mailer/sendAccountActivationEmail.test.ts | 24 +++++++++++++ .../src/mailer/sendAccountActivationEmail.ts | 23 +++++++++++++ backend/src/mailer/sendEMail.test.ts | 34 ++----------------- backend/src/mailer/sendEMail.ts | 31 +++-------------- 7 files changed, 58 insertions(+), 63 deletions(-) create mode 100644 backend/src/mailer/sendAccountActivationEmail.test.ts create mode 100644 backend/src/mailer/sendAccountActivationEmail.ts diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 0782417be..40c836b1b 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -652,7 +652,6 @@ export class TransactionResolver { // send notification email // TODO: translate await sendEMail({ - from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`, to: `${recipiantUser.firstName} ${recipiantUser.lastName} <${recipiantUser.email}>`, subject: 'Gradido Überweisung', text: `Hallo ${recipiantUser.firstName} ${recipiantUser.lastName} diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 6944215d9..0348a4c4e 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -12,9 +12,9 @@ import { LoginUserBackup } from '@entity/LoginUserBackup' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' import { User } from '@entity/User' import CONFIG from '../../config' -import { sendAccountActivationEmail } from '../../util/sendEMail' +import { sendAccountActivationEmail } from '../../mailer/sendAccountActivationEmail' -jest.mock('../../util/sendEMail', () => { +jest.mock('../../mailer/sendAccountActivationEmail', () => { return { __esModule: true, sendAccountActivationEmail: jest.fn(), diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index de0ad7143..5857a15ed 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -20,7 +20,8 @@ import { UserRepository } from '../../typeorm/repository/User' import { LoginUser } from '@entity/LoginUser' import { LoginUserBackup } from '@entity/LoginUserBackup' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' -import { sendAccountActivationEmail, sendEMail } from '../../mailer/sendEMail' +import { sendEMail } from '../../mailer/sendEMail' +import { sendAccountActivationEmail } from '../../mailer/sendAccountActivationEmail' import { LoginElopageBuysRepository } from '../../typeorm/repository/LoginElopageBuys' import { signIn } from '../../apis/KlicktippController' import { RIGHTS } from '../../auth/RIGHTS' @@ -522,7 +523,6 @@ export class UserResolver { ) const emailSent = await sendEMail({ - from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`, to: `${loginUser.firstName} ${loginUser.lastName} <${email}>`, subject: 'Gradido: Reset Password', text: `Hallo ${loginUser.firstName} ${loginUser.lastName}, diff --git a/backend/src/mailer/sendAccountActivationEmail.test.ts b/backend/src/mailer/sendAccountActivationEmail.test.ts new file mode 100644 index 000000000..e1c41b088 --- /dev/null +++ b/backend/src/mailer/sendAccountActivationEmail.test.ts @@ -0,0 +1,24 @@ +import { sendAccountActivationEmail } from './sendAccountActivationEmail' +import { sendEMail } from './sendEMail' + +jest.mock('./sendEMail', () => { + return { + __esModule: true, + sendEMail: jest.fn(), + } +}) + +describe('sendAccountActivationEmail', () => { + beforeEach(async () => { + await sendAccountActivationEmail('activationLink', 'Peter', 'Lustig', 'peter@lustig.de') + }) + + it('calls sendEMail', () => { + expect(sendEMail).toBeCalledWith({ + to: `Peter Lustig `, + subject: 'Gradido: E-Mail Überprüfung', + text: + expect.stringContaining('Hallo Peter Lustig') && expect.stringContaining('activationLink'), + }) + }) +}) diff --git a/backend/src/mailer/sendAccountActivationEmail.ts b/backend/src/mailer/sendAccountActivationEmail.ts new file mode 100644 index 000000000..4252eac46 --- /dev/null +++ b/backend/src/mailer/sendAccountActivationEmail.ts @@ -0,0 +1,23 @@ +import { sendEMail } from './sendEMail' + +export const sendAccountActivationEmail = ( + activationLink: string, + firstName: string, + lastName: string, + email: string, +): Promise => { + return sendEMail({ + to: `${firstName} ${lastName} <${email}>`, + subject: 'Gradido: E-Mail Überprüfung', + text: `Hallo ${firstName} ${lastName}, + +Deine EMail wurde soeben bei Gradido registriert. + +Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren: +${activationLink} +oder kopiere den obigen Link in dein Browserfenster. + +Mit freundlichen Grüßen, +dein Gradido-Team`, + }) +} diff --git a/backend/src/mailer/sendEMail.test.ts b/backend/src/mailer/sendEMail.test.ts index 76f7ad016..f933dd9b3 100644 --- a/backend/src/mailer/sendEMail.test.ts +++ b/backend/src/mailer/sendEMail.test.ts @@ -1,4 +1,4 @@ -import sendEmail from './sendEMail' +import { sendEMail } from './sendEMail' import { createTransport } from 'nodemailer' import CONFIG from '../config' @@ -32,8 +32,7 @@ describe('sendEMail', () => { // eslint-disable-next-line no-console console.log = consoleLogMock beforeEach(async () => { - result = await sendEmail.sendEMail({ - from: 'sender@mail.org', + result = await sendEMail({ to: 'receiver@mail.org', subject: 'Subject', text: 'Text text text', @@ -57,8 +56,7 @@ describe('sendEMail', () => { describe('config email is true', () => { beforeEach(async () => { CONFIG.EMAIL = true - result = await sendEmail.sendEMail({ - from: 'sender@mail.org', + result = await sendEMail({ to: 'receiver@mail.org', subject: 'Subject', text: 'Text text text', @@ -83,29 +81,3 @@ describe('sendEMail', () => { }) }) }) - -describe('sendAccountActivationEmail', () => { - const spy = jest.spyOn(sendEmail, 'sendEMail') - beforeEach(async () => { - jest.clearAllMocks() - await sendEmail.sendAccountActivationEmail( - 'activationLink', - 'Petet', - 'Lustig', - 'peter@lustig.de', - ) - }) - - it.skip('calls sendEMail', () => { - expect(spy).toBeCalledWith( - expect.objectContaining({ - from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`, - to: `Peter Lustig `, - subject: 'Gradido: E-Mail Überprüfung', - text: - expect.stringContaining('Hallo Peter Lustig') && - expect.stringContaining('activationLink'), - }), - ) - }) -}) diff --git a/backend/src/mailer/sendEMail.ts b/backend/src/mailer/sendEMail.ts index 5ef2117b7..e26589347 100644 --- a/backend/src/mailer/sendEMail.ts +++ b/backend/src/mailer/sendEMail.ts @@ -3,7 +3,6 @@ import { createTransport } from 'nodemailer' import CONFIG from '../config' export const sendEMail = async (emailDef: { - from: string to: string subject: string text: string @@ -23,34 +22,12 @@ export const sendEMail = async (emailDef: { pass: CONFIG.EMAIL_PASSWORD, }, }) - const info = await transporter.sendMail(emailDef) + const info = await transporter.sendMail({ + ...emailDef, + from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`, + }) if (!info.messageId) { throw new Error('error sending notification email, but transaction succeed') } return true } - -export const sendAccountActivationEmail = ( - activationLink: string, - firstName: string, - lastName: string, - email: string, -): Promise => { - return sendEMail({ - from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`, - to: `${firstName} ${lastName} <${email}>`, - subject: 'Gradido: E-Mail Überprüfung', - text: `Hallo ${firstName} ${lastName}, - - Deine EMail wurde soeben bei Gradido registriert. - - Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren: - ${activationLink} - oder kopiere den obigen Link in dein Browserfenster. - - Mit freundlichen Grüßen, - dein Gradido-Team`, - }) -} - -export default { sendAccountActivationEmail, sendEMail }