Skip to content

Commit b26fc75

Browse files
committed
refine login route tests
1 parent aca50c4 commit b26fc75

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

tests/routes/v1/login/index.test.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { addHeaders } from '../../../auth/authentication/mock';
22

33
// the mock for this class should be below all other mock imports
44
import {
5-
mockKeystoreCreate, mockUserFindByEmail, USER_EMAIL, USER_PASSWORD
5+
mockKeystoreCreate, mockUserFindByEmail, createTokensSpy,
6+
USER_EMAIL, USER_PASSWORD
67
} from './mock';
78

89
import supertest from 'supertest';
@@ -13,14 +14,18 @@ describe('Login Route', () => {
1314
const endpoint = '/v1/login/basic';
1415
const request = supertest(app);
1516

16-
beforeAll(() => {
17+
beforeEach(() => {
1718
mockKeystoreCreate.mockClear();
1819
mockUserFindByEmail.mockClear();
20+
createTokensSpy.mockClear();
1921
});
2022

2123
it('Should throw error when empty body is sent', async () => {
2224
const response = await addHeaders(request.post(endpoint));
2325
expect(response.status).toBe(400);
26+
expect(mockUserFindByEmail).toBeCalledTimes(0);
27+
expect(mockKeystoreCreate).toBeCalledTimes(0);
28+
expect(createTokensSpy).toBeCalledTimes(0);
2429
});
2530

2631
it('Should throw error when email is only sent', async () => {
@@ -29,6 +34,9 @@ describe('Login Route', () => {
2934
);
3035
expect(response.status).toBe(400);
3136
expect(response.body.message).toMatch(/password/);
37+
expect(mockUserFindByEmail).toBeCalledTimes(0);
38+
expect(mockKeystoreCreate).toBeCalledTimes(0);
39+
expect(createTokensSpy).toBeCalledTimes(0);
3240
});
3341

3442
it('Should throw error when password is only sent', async () => {
@@ -37,6 +45,9 @@ describe('Login Route', () => {
3745
);
3846
expect(response.status).toBe(400);
3947
expect(response.body.message).toMatch(/email/);
48+
expect(mockUserFindByEmail).toBeCalledTimes(0);
49+
expect(mockKeystoreCreate).toBeCalledTimes(0);
50+
expect(createTokensSpy).toBeCalledTimes(0);
4051
});
4152

4253
it('Should throw error when email is not valid format', async () => {
@@ -45,6 +56,9 @@ describe('Login Route', () => {
4556
);
4657
expect(response.status).toBe(400);
4758
expect(response.body.message).toMatch(/valid email/);
59+
expect(mockUserFindByEmail).toBeCalledTimes(0);
60+
expect(mockKeystoreCreate).toBeCalledTimes(0);
61+
expect(createTokensSpy).toBeCalledTimes(0);
4862
});
4963

5064
it('Should throw error when password is not valid format', async () => {
@@ -56,6 +70,9 @@ describe('Login Route', () => {
5670
expect(response.status).toBe(400);
5771
expect(response.body.message).toMatch(/password length/);
5872
expect(response.body.message).toMatch(/6 char/);
73+
expect(mockUserFindByEmail).toBeCalledTimes(0);
74+
expect(mockKeystoreCreate).toBeCalledTimes(0);
75+
expect(createTokensSpy).toBeCalledTimes(0);
5976
});
6077

6178
it('Should throw error when user not registered for email', async () => {
@@ -66,6 +83,9 @@ describe('Login Route', () => {
6683
}));
6784
expect(response.status).toBe(400);
6885
expect(response.body.message).toMatch(/not registered/);
86+
expect(mockUserFindByEmail).toBeCalledTimes(1);
87+
expect(mockKeystoreCreate).toBeCalledTimes(0);
88+
expect(createTokensSpy).toBeCalledTimes(0);
6989
});
7090

7191
it('Should throw error for wrong password', async () => {
@@ -76,6 +96,9 @@ describe('Login Route', () => {
7696
}));
7797
expect(response.status).toBe(401);
7898
expect(response.body.message).toMatch(/authentication failure/i);
99+
expect(mockUserFindByEmail).toBeCalledTimes(1);
100+
expect(mockKeystoreCreate).toBeCalledTimes(0);
101+
expect(createTokensSpy).toBeCalledTimes(0);
79102
});
80103

81104
it('Should send success response for correct credentials', async () => {
@@ -96,5 +119,9 @@ describe('Login Route', () => {
96119
expect(response.body.data.tokens).toBeDefined();
97120
expect(response.body.data.tokens).toHaveProperty('accessToken');
98121
expect(response.body.data.tokens).toHaveProperty('refreshToken');
122+
123+
expect(mockUserFindByEmail).toBeCalledTimes(1);
124+
expect(mockKeystoreCreate).toBeCalledTimes(1);
125+
expect(createTokensSpy).toBeCalledTimes(1);
99126
});
100127
});

tests/routes/v1/login/mock.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ import { IKeystore } from '../../../../src/database/model/Keystore';
33
import { IUser } from '../../../../src/database/model/User';
44
import { Types } from 'mongoose';
55
import bcrypt from 'bcrypt';
6+
import * as authUtils from '../../../../src/auth/authUtils';
67

78
export const USER_EMAIL = '[email protected]';
89
export const USER_PASSWORD = 'abc123';
910
export const USER_PASSWORD_HASH = bcrypt.hashSync(USER_PASSWORD, 10);
1011

12+
export const createTokensSpy = jest.spyOn(authUtils, 'createTokens');
13+
1114
export const mockKeystoreCreate =
1215
jest.fn(
1316
async (client: IUser, primaryKey: string, secondaryKey: string): Promise<IKeystore> => {

0 commit comments

Comments
 (0)