From fb53a0bcb042694ba52c48c20c62d9000371f122 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 12 Jan 2022 11:36:17 +0100 Subject: [PATCH] extract reset password email --- backend/src/graphql/resolver/UserResolver.ts | 20 ++++++---------- .../src/mailer/sendResetPasswordEmail.test.ts | 23 +++++++++++++++++++ backend/src/mailer/sendResetPasswordEmail.ts | 21 +++++++++++++++++ 3 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 backend/src/mailer/sendResetPasswordEmail.test.ts create mode 100644 backend/src/mailer/sendResetPasswordEmail.ts diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 5857a15ed..bf2274c7e 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -20,7 +20,7 @@ import { UserRepository } from '../../typeorm/repository/User' import { LoginUser } from '@entity/LoginUser' import { LoginUserBackup } from '@entity/LoginUserBackup' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' -import { sendEMail } from '../../mailer/sendEMail' +import { sendResetPasswordEmail } from '../../mailer/sendResetPasswordEmail' import { sendAccountActivationEmail } from '../../mailer/sendAccountActivationEmail' import { LoginElopageBuysRepository } from '../../typeorm/repository/LoginElopageBuys' import { signIn } from '../../apis/KlicktippController' @@ -522,18 +522,12 @@ export class UserResolver { optInCode.verificationCode.toString(), ) - const emailSent = await sendEMail({ - to: `${loginUser.firstName} ${loginUser.lastName} <${email}>`, - subject: 'Gradido: Reset Password', - text: `Hallo ${loginUser.firstName} ${loginUser.lastName}, - - Du oder jemand anderes hat für dieses Konto ein Zurücksetzen des Passworts angefordert. - Wenn du es warst, klicke bitte auf den Link: ${link} - oder kopiere den obigen Link in Dein Browserfenster. - - Mit freundlichen Grüßen, - dein Gradido-Team`, - }) + const emailSent = await sendResetPasswordEmail( + link, + loginUser.firstName, + loginUser.lastName, + email, + ) // In case EMails are disabled log the activation link for the user if (!emailSent) { diff --git a/backend/src/mailer/sendResetPasswordEmail.test.ts b/backend/src/mailer/sendResetPasswordEmail.test.ts new file mode 100644 index 000000000..18eaaf179 --- /dev/null +++ b/backend/src/mailer/sendResetPasswordEmail.test.ts @@ -0,0 +1,23 @@ +import { sendResetPasswordEmail } from './sendResetPasswordEmail' +import { sendEMail } from './sendEMail' + +jest.mock('./sendEMail', () => { + return { + __esModule: true, + sendEMail: jest.fn(), + } +}) + +describe('sendResetPasswordEmail', () => { + beforeEach(async () => { + await sendResetPasswordEmail('resetLink', 'Peter', 'Lustig', 'peter@lustig.de') + }) + + it('calls sendEMail', () => { + expect(sendEMail).toBeCalledWith({ + to: `Peter Lustig `, + subject: 'Gradido: Reset Password', + text: expect.stringContaining('Hallo Peter Lustig') && expect.stringContaining('resetLink'), + }) + }) +}) diff --git a/backend/src/mailer/sendResetPasswordEmail.ts b/backend/src/mailer/sendResetPasswordEmail.ts new file mode 100644 index 000000000..7cf9e7f23 --- /dev/null +++ b/backend/src/mailer/sendResetPasswordEmail.ts @@ -0,0 +1,21 @@ +import { sendEMail } from './sendEMail' + +export const sendResetPasswordEmail = ( + resetLink: string, + firstName: string, + lastName: string, + email: string, +): Promise => { + return sendEMail({ + to: `${firstName} ${lastName} <${email}>`, + subject: 'Gradido: Reset Password', + text: `Hallo ${firstName} ${lastName}, + +Du oder jemand anderes hat für dieses Konto ein Zurücksetzen des Passworts angefordert. +Wenn du es warst, klicke bitte auf den Link: ${resetLink} +oder kopiere den obigen Link in Dein Browserfenster. + +Mit freundlichen Grüßen, +dein Gradido-Team`, + }) +}