-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
user.service.spec.ts
109 lines (84 loc) · 3.16 KB
/
user.service.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import { MongooseModule } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import {
closeInMemoryDatabaseConnection,
createInMemoryDatabaseModule,
DtoMockGenerator
} from '@kb-dev-tools';
import { User } from '@kb-models';
import { UserService } from './user.service';
describe('UserService', () => {
let service: UserService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
createInMemoryDatabaseModule(),
MongooseModule.forFeature([{
name: User.modelName,
schema: User.schema
}])
],
providers: [UserService]
}).compile();
service = module.get<UserService>(UserService);
}, 10000);
afterEach(async () => {
await closeInMemoryDatabaseConnection();
});
it('should be defined', () => {
expect(service).toBeDefined();
});
it('should be able to get all', async () => {
const user1 = DtoMockGenerator.user();
const user2 = DtoMockGenerator.user();
const createdUser1 = await service.create(user1);
const createdUser2 = await service.create(user2);
const foundUsers = await service.findAll();
const foundUsersParsed = foundUsers
.map((user) => new User(user.toObject()));
expect(foundUsersParsed).toContainEqual(createdUser1);
expect(foundUsersParsed).toContainEqual(createdUser2);
expect(foundUsersParsed.length).toBeGreaterThanOrEqual(2);
});
it('should be able to get all users', async () => {
const user1 = DtoMockGenerator.user();
const user2 = DtoMockGenerator.user();
const createdUser1 = await service.create(user1);
const createdUser2 = await service.create(user2);
const foundUsers = await service.findAllUsers();
expect(foundUsers).toContainEqual(createdUser1);
expect(foundUsers).toContainEqual(createdUser2);
expect(foundUsers.length).toBeGreaterThanOrEqual(2);
});
it('should be able to get a user by username', async () => {
const user = DtoMockGenerator.user();
const createdUser = await service.create(user);
const foundUser = await service.findByUsername(user.username);
expect(foundUser).toEqual(createdUser);
});
it('should return null if user does not exist', async () => {
const foundUser = await service.findByUsername('username');
expect(foundUser).toBeUndefined();
});
it('should NOT allow creating 2 users with same username', async () => {
const user1 = new User({
...DtoMockGenerator.user(),
username: 'test-user'
});
const user2 = new User({
...DtoMockGenerator.user(),
username: 'test-user'
});
const createdUser = await service.create(user1);
let creationError: string;
await service.create(user2)
.catch((err) => creationError = err.message);
expect(creationError).toMatch(/E11000 duplicate key error/);
expect(creationError).toMatch(/test-user/);
const allUsers = await service.findAllUsers();
expect(allUsers.length).toBe(1);
expect(allUsers[0]).toEqual(expect.objectContaining(createdUser));
expect(allUsers[0]._id).toBeDefined();
expect(allUsers[0]._id).toEqual(createdUser._id);
});
});