diff --git a/packages/api/src/services/create_user.ts b/packages/api/src/services/create_user.ts index 4bacfd9e6..c71da06cd 100644 --- a/packages/api/src/services/create_user.ts +++ b/packages/api/src/services/create_user.ts @@ -142,7 +142,9 @@ export const createUser = async (input: { }) if (input.pendingConfirmation) { - await sendNewAccountVerificationEmail(user) + if (!(await sendNewAccountVerificationEmail(user))) { + return Promise.reject({ errorCode: SignupErrorCode.InvalidEmail }) + } } return [user, profile] diff --git a/packages/api/test/routers/auth.test.ts b/packages/api/test/routers/auth.test.ts index f1f6c5da6..8bfd3e5e4 100644 --- a/packages/api/test/routers/auth.test.ts +++ b/packages/api/test/routers/auth.test.ts @@ -1,10 +1,6 @@ -import { Job, Queue } from 'bullmq' -import chai, { expect } from 'chai' -import sinon from 'sinon' -import sinonChai from 'sinon-chai' +import { expect } from 'chai' import supertest from 'supertest' import { StatusType, User } from '../../src/entity/user' -import { SendEmailJobData } from '../../src/jobs/send_email' import { getRepository } from '../../src/repository' import { userRepository } from '../../src/repository/user' import { isValidSignupRequest } from '../../src/routers/auth/auth_router' @@ -17,12 +13,9 @@ import { generateVerificationToken, hashPassword, } from '../../src/utils/auth' -import * as createTask from '../../src/utils/createTask' import { createTestUser } from '../db' import { generateFakeUuid, request } from '../util' -chai.use(sinonChai) - describe('auth router', () => { const route = '/api/auth' @@ -183,12 +176,7 @@ describe('auth router', () => { }) context('when user is not confirmed', () => { - let fake: ( - jobData: SendEmailJobData - ) => Promise | undefined> - beforeEach(async () => { - fake = sinon.replace(createTask, 'enqueueSendEmail', sinon.fake()) await updateUser(user.id, { status: StatusType.Pending }) email = user.email password = correctPassword @@ -196,7 +184,6 @@ describe('auth router', () => { afterEach(async () => { await updateUser(user.id, { status: StatusType.Active }) - sinon.restore() }) it('redirects with error code PendingVerification', async () => { @@ -205,11 +192,6 @@ describe('auth router', () => { '/email-login?errorCodes=PENDING_VERIFICATION' ) }) - - it('sends a verification email', async () => { - await loginRequest(email, password).expect(302) - expect(fake).to.have.been.calledOnce - }) }) context('when user not exists', () => { @@ -268,12 +250,10 @@ describe('auth router', () => { let token: string before(async () => { - sinon.replace(createTask, 'enqueueSendEmail', sinon.fake()) user = await createTestUser('pendingUser', undefined, 'password', true) }) after(async () => { - sinon.restore() await deleteUser(user.id) }) @@ -371,40 +351,11 @@ describe('auth router', () => { }) context('when reset password email sent', () => { - before(() => { - sinon.replace( - createTask, - 'enqueueSendEmail', - sinon.fake.resolves(new Job(new Queue('test'), 'test', 'test')) - ) - }) - - after(() => { - sinon.restore() - }) - it('redirects to forgot-password page with success message', async () => { const res = await emailResetPasswordReq(email).expect(302) expect(res.header.location).to.endWith('/auth/reset-sent') }) }) - - context('when reset password email not sent', () => { - before(() => { - sinon.replace(createTask, 'enqueueSendEmail', sinon.fake()) - }) - - after(() => { - sinon.restore() - }) - - it('redirects to sign up page with error code INVALID_EMAIL', async () => { - const res = await emailResetPasswordReq(email).expect(302) - expect(res.header.location).to.endWith( - '/forgot-password?errorCodes=INVALID_EMAIL' - ) - }) - }) }) context('when email is not verified', () => { diff --git a/packages/api/test/services/create_user.test.ts b/packages/api/test/services/create_user.test.ts index 039aa05e4..3449b5f9d 100644 --- a/packages/api/test/services/create_user.test.ts +++ b/packages/api/test/services/create_user.test.ts @@ -1,23 +1,15 @@ -import { Job } from 'bullmq' -import chai, { expect } from 'chai' -import 'mocha' -import sinon from 'sinon' -import sinonChai from 'sinon-chai' +import { expect } from 'chai' import { Filter } from '../../src/entity/filter' import { StatusType, User } from '../../src/entity/user' -import { SendEmailJobData } from '../../src/jobs/send_email' import { authTrx, getRepository } from '../../src/repository' import { findProfile } from '../../src/services/profile' import { deleteUser } from '../../src/services/user' -import * as createTask from '../../src/utils/createTask' import { createTestUser, createUserWithoutProfile, deleteFiltersFromUser, } from '../db' -chai.use(sinonChai) - describe('create user', () => { context('creates a user through manual sign up', () => { it('adds the default filters to the user', async () => { @@ -96,17 +88,9 @@ describe('create user', () => { context('create a user with pending confirmation', () => { const name = 'pendingUser' - let fake: ( - jobData: SendEmailJobData - ) => Promise | undefined> context('when email sends successfully', () => { - beforeEach(() => { - fake = sinon.replace(createTask, 'enqueueSendEmail', sinon.fake()) - }) - afterEach(async () => { - sinon.restore() const user = await getRepository(User).findOneBy({ name }) await deleteUser(user!.id) }) @@ -117,12 +101,6 @@ describe('create user', () => { expect(user.status).to.eql(StatusType.Pending) expect(user.name).to.eql(name) }) - - it('sends an email to the user', async () => { - await createTestUser(name, undefined, undefined, true) - - expect(fake).to.have.been.calledOnce - }) }) }) })