Skip to content

Commit 3e55726

Browse files
committed
add better support for role tests
1 parent d699e4d commit 3e55726

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

tests/auth/authentication/mock.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IKeystore } from '../../../src/database/model/Keystore';
99

1010
export const ACCESS_TOKEN = 'xyz';
1111

12-
export const USER_ID = new Types.ObjectId('5e7b95923085872d3c378f35'); // random id with object id format
12+
export const USER_ID = new Types.ObjectId(); // random id with object id format
1313

1414
export const mockUserFindById = jest.fn(async (id: Types.ObjectId) => {
1515
if (USER_ID.equals(id)) return <IUser>{ _id: new Types.ObjectId(id) };
@@ -46,8 +46,8 @@ export const addHeaders = (request: any) => request
4646
.set('Content-Type', 'application/json')
4747
.set('x-api-key', API_KEY);
4848

49-
export const addAuthHeaders = (request: any) => request
49+
export const addAuthHeaders = (request: any, userId: Types.ObjectId = USER_ID) => request
5050
.set('Content-Type', 'application/json')
5151
.set('x-api-key', API_KEY)
5252
.set('x-access-token', ACCESS_TOKEN)
53-
.set('x-user-id', USER_ID);
53+
.set('x-user-id', userId.toHexString());

tests/auth/authorization/index.test.ts

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

33
// import the mock for the current test after all other mock imports
44
// this will prevent the different implementations by the other mock
5-
import { mockRoleRepoFindByCode, mockUserFindByIdForWriter } from './mock';
5+
import { mockRoleRepoFindByCode, mockUserFindById, USER_ID_WRITER } from './mock';
66

77
import app from '../../../src/app';
88
import supertest from 'supertest';
@@ -15,15 +15,15 @@ describe('authentication validation for editor', () => {
1515

1616
beforeEach(() => {
1717
mockRoleRepoFindByCode.mockClear();
18-
mockUserFindByIdForWriter.mockClear();
18+
mockUserFindById.mockClear();
1919
});
2020

2121
it('Should response with 401 if user do not have editor role', async () => {
2222
const response = await addAuthHeaders(request.get(endpoint));
2323
expect(response.status).toBe(401);
2424
expect(response.body.message).toMatch(/denied/);
2525
expect(mockRoleRepoFindByCode).toBeCalledTimes(1);
26-
expect(mockUserFindByIdForWriter).toBeCalledTimes(1);
26+
expect(mockUserFindById).toBeCalledTimes(1);
2727
expect(mockRoleRepoFindByCode).toBeCalledWith(RoleCode.EDITOR);
2828
});
2929
});
@@ -35,14 +35,14 @@ describe('authentication validation for writer', () => {
3535

3636
beforeEach(() => {
3737
mockRoleRepoFindByCode.mockClear();
38-
mockUserFindByIdForWriter.mockClear();
38+
mockUserFindById.mockClear();
3939
});
4040

4141
it('Should response with 404 if user have writer role', async () => {
42-
const response = await addAuthHeaders(request.get(endpoint));
42+
const response = await addAuthHeaders(request.get(endpoint), USER_ID_WRITER);
4343
expect(response.status).toBe(404);
4444
expect(mockRoleRepoFindByCode).toBeCalledTimes(1);
45-
expect(mockUserFindByIdForWriter).toBeCalledTimes(1);
45+
expect(mockUserFindById).toBeCalledTimes(1);
4646
expect(mockRoleRepoFindByCode).toBeCalledWith(RoleCode.WRITER);
4747
});
4848
});

tests/auth/authorization/mock.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,35 @@ import { Types } from 'mongoose';
55
import { IUser } from '../../../src/database/model/User';
66
import { RoleCode, IRole } from '../../../src/database/model/Role';
77

8-
const LEARNER_ROLE_ID = new Types.ObjectId('5e7b95923085872d3c378f35'); // RONDOM ID
9-
const WRITER_ROLE_ID = new Types.ObjectId('56cb91bdc3464f14678934ca'); // RONDOM ID
10-
const EDITOR_ROLE_ID = new Types.ObjectId('58cd7cfcf9f1150515ee9fb0'); // RONDOM ID
118

12-
export const mockUserFindByIdForWriter = jest.fn(async (id: Types.ObjectId) => {
9+
export const LEARNER_ROLE_ID = new Types.ObjectId(); // random id
10+
export const WRITER_ROLE_ID = new Types.ObjectId(); // random id
11+
export const EDITOR_ROLE_ID = new Types.ObjectId(); // random id
12+
13+
export const USER_ID_WRITER = new Types.ObjectId(); // random id
14+
export const USER_ID_EDITOR = new Types.ObjectId(); // random id
15+
16+
export const mockUserFindById = jest.fn(async (id: Types.ObjectId) => {
1317
if (USER_ID.equals(id)) return <IUser>{
1418
_id: USER_ID,
19+
roles: [
20+
<IRole>{ _id: LEARNER_ROLE_ID, code: RoleCode.LEARNER },
21+
]
22+
};
23+
if (USER_ID_WRITER.equals(id)) return <IUser>{
24+
_id: USER_ID_WRITER,
1525
roles: [
1626
<IRole>{ _id: LEARNER_ROLE_ID, code: RoleCode.LEARNER },
1727
<IRole>{ _id: WRITER_ROLE_ID, code: RoleCode.WRITER },
1828
]
1929
};
30+
if (USER_ID_EDITOR.equals(id)) return <IUser>{
31+
_id: USER_ID_EDITOR,
32+
roles: [
33+
<IRole>{ _id: LEARNER_ROLE_ID, code: RoleCode.LEARNER },
34+
<IRole>{ _id: WRITER_ROLE_ID, code: RoleCode.EDITOR },
35+
]
36+
};
2037
else return null;
2138
});
2239

@@ -43,7 +60,7 @@ export const mockRoleRepoFindByCode = jest.fn(
4360
});
4461

4562
jest.mock('../../../src/database/repository/UserRepo', () => ({
46-
get findById() { return mockUserFindByIdForWriter; }
63+
get findById() { return mockUserFindById; }
4764
}));
4865

4966
jest.mock('../../../src/database/repository/RoleRepo', () => ({

0 commit comments

Comments
 (0)