diff --git a/backend/src/middleware/login/loginMiddleware.js b/backend/src/middleware/login/loginMiddleware.js index cd8ab64ee..abf0d0b18 100644 --- a/backend/src/middleware/login/loginMiddleware.js +++ b/backend/src/middleware/login/loginMiddleware.js @@ -33,7 +33,9 @@ const sendPasswordResetMail = async (resolve, root, args, context, resolveInfo) const sendEmailVerificationMail = async (resolve, root, args, context, resolveInfo) => { const response = await resolve(root, args, context, resolveInfo) const { email, nonce, name } = response - await sendMail(emailVerificationTemplate({ email, variables: { nonce, name } })) + if (nonce) { + await sendMail(emailVerificationTemplate({ email, variables: { nonce, name } })) + } delete response.nonce return response } diff --git a/backend/src/schema/resolvers/emails.js b/backend/src/schema/resolvers/emails.js index 8f6b1c651..d705781ca 100644 --- a/backend/src/schema/resolvers/emails.js +++ b/backend/src/schema/resolvers/emails.js @@ -40,7 +40,9 @@ export default { } // check email does not belong to anybody - await existingEmailAddress({ args, context }) + const existingEmail = await existingEmailAddress({ args, context }) + if (existingEmail && existingEmail.alreadyExistingEmail && existingEmail.user) + return existingEmail.alreadyExistingEmail const nonce = generateNonce() const { diff --git a/backend/src/schema/resolvers/emails.spec.js b/backend/src/schema/resolvers/emails.spec.js index b527ca3b0..068e9263c 100644 --- a/backend/src/schema/resolvers/emails.spec.js +++ b/backend/src/schema/resolvers/emails.spec.js @@ -134,11 +134,17 @@ describe('AddEmailAddress', () => { }) describe('but if another user owns an `EmailAddress` already with that email', () => { - it('throws UserInputError because of unique constraints', async () => { + it('does not throw UserInputError', async () => { await Factory.build('user', {}, { email: 'new-email@example.org' }) await expect(mutate({ mutation, variables })).resolves.toMatchObject({ - data: { AddEmailAddress: null }, - errors: [{ message: 'A user account with this email already exists.' }], + data: { + AddEmailAddress: { + createdAt: expect.any(String), + verifiedAt: null, + email: 'new-email@example.org', + }, + }, + errors: undefined, }) }) }) diff --git a/backend/src/schema/resolvers/registration.spec.js b/backend/src/schema/resolvers/registration.spec.js index ebe36456b..aacfb1054 100644 --- a/backend/src/schema/resolvers/registration.spec.js +++ b/backend/src/schema/resolvers/registration.spec.js @@ -118,9 +118,9 @@ describe('Signup', () => { await emailAddress.relateTo(user, 'belongsTo') }) - it('throws UserInputError error because of unique constraint violation', async () => { + it('does not throw UserInputError error', async () => { await expect(mutate({ mutation, variables })).resolves.toMatchObject({ - errors: [{ message: 'A user account with this email already exists.' }], + data: { Signup: { email: 'someuser@example.org' } }, }) }) })