@@ -4,20 +4,102 @@ import { UsersRepository } from '../repositories/users.repository';
4
4
import { MailModule } from '../mail/mail.module' ;
5
5
import { PrismaModule } from '../prisma/prisma.module' ;
6
6
import { AuthModule } from '../auth/auth.module' ;
7
+ import { PrismaService } from '../prisma/prisma.service' ;
8
+ import { Request } from 'express' ;
9
+ import { ForbiddenException } from '@nestjs/common' ;
7
10
8
11
describe ( 'UsersService' , ( ) => {
9
- let service : UsersService ;
12
+ let usersService : UsersService ;
13
+ let prismaService : PrismaService ;
10
14
11
- beforeEach ( async ( ) => {
15
+ beforeAll ( async ( ) => {
12
16
const module : TestingModule = await Test . createTestingModule ( {
13
17
providers : [ UsersService , UsersRepository ] ,
14
18
imports : [ MailModule , PrismaModule , AuthModule ] ,
15
19
} ) . compile ( ) ;
16
20
17
- service = module . get < UsersService > ( UsersService ) ;
21
+ usersService = module . get < UsersService > ( UsersService ) ;
22
+ prismaService = module . get < PrismaService > ( PrismaService ) ;
23
+
24
+ } ) ;
25
+
26
+ afterAll ( async ( ) => {
27
+ await prismaService . $disconnect ( ) ;
18
28
} ) ;
19
29
20
- it ( 'should be defined' , ( ) => {
21
- expect ( service ) . toBeDefined ( ) ;
30
+ beforeEach ( async ( ) => {
31
+ await prismaService . queue . deleteMany ( ) ;
32
+ await prismaService . user . deleteMany ( ) ;
33
+ } ) ;
34
+
35
+ describe ( 'getNotApprovedUsers' , ( ) => {
36
+ it ( 'should return a list of not approved users if the requester is an admin' , async ( ) => {
37
+ const admin = await prismaService . user . create ( {
38
+ data : {
39
+
40
+ password : '123456' ,
41
+ firstName : 'John' ,
42
+ lastName : 'Doe' ,
43
+ admin : true ,
44
+ approved : true ,
45
+ } ,
46
+ } ) ;
47
+
48
+
49
+ await prismaService . user . createMany ( {
50
+ data : [
51
+ {
52
+
53
+ password : '123456' ,
54
+ firstName : 'John' ,
55
+ lastName : 'Doe' ,
56
+ admin : false ,
57
+ approved : false ,
58
+ } ,
59
+ {
60
+
61
+ password : '123456' ,
62
+ firstName : 'Andrew' ,
63
+ lastName : 'Doe' ,
64
+ admin : false ,
65
+ approved : false ,
66
+ } ,
67
+ ] ,
68
+ } ) ;
69
+
70
+ const notApprovedUsers = await prismaService . user . findMany ( {
71
+ where : { approved : false } ,
72
+ } ) ;
73
+
74
+ const req = {
75
+ user : {
76
+ userId : admin . id ,
77
+ } ,
78
+ } as unknown as Request ;
79
+
80
+ const result = await usersService . getNotApprovedUsers ( req ) ;
81
+ expect ( result ) . toStrictEqual ( notApprovedUsers ) ;
82
+ } ) ;
83
+
84
+ it ( 'should throw ForbiddenException if the requester is not an admin' , async ( ) => {
85
+ const user = await prismaService . user . create ( {
86
+ data : {
87
+
88
+ password : 'anon1234' ,
89
+ firstName : 'Alex' ,
90
+ lastName : 'Bond' ,
91
+ admin : false ,
92
+ approved : true ,
93
+ } ,
94
+ } ) ;
95
+
96
+ const req = {
97
+ user : {
98
+ userId : user . id ,
99
+ } ,
100
+ } as unknown as Request ;
101
+
102
+ await expect ( usersService . getNotApprovedUsers ( req ) ) . rejects . toThrow ( ForbiddenException ) ;
103
+ } ) ;
22
104
} ) ;
23
105
} ) ;
0 commit comments