@hedhog/admin 0.46.36 → 0.46.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +960 -960
  2. package/dist/auth/auth.service.d.ts.map +1 -1
  3. package/dist/auth/auth.service.js +22 -2
  4. package/dist/auth/auth.service.js.map +1 -1
  5. package/dist/auth/consts/body.js +24 -24
  6. package/dist/emails/index.d.ts +3 -0
  7. package/dist/emails/index.d.ts.map +1 -0
  8. package/dist/emails/index.js +19 -0
  9. package/dist/emails/index.js.map +1 -0
  10. package/dist/emails/lib.d.ts +6 -0
  11. package/dist/emails/lib.d.ts.map +1 -0
  12. package/dist/emails/lib.js +43 -0
  13. package/dist/emails/lib.js.map +1 -0
  14. package/dist/emails/templates.d.ts +13 -0
  15. package/dist/emails/templates.d.ts.map +1 -0
  16. package/dist/emails/templates.js +63 -0
  17. package/dist/emails/templates.js.map +1 -0
  18. package/frontend/menu/components/create-panel.tsx.ejs +55 -55
  19. package/frontend/menu/components/update-panel.tsx.ejs +67 -67
  20. package/frontend/menu/locales/en/admin.menu.json +11 -11
  21. package/frontend/menu/locales/pt/admin.menu.json +11 -11
  22. package/frontend/menu/react-query/handlers.ts.ejs +28 -28
  23. package/frontend/menu/react-query/requests.ts.ejs +56 -56
  24. package/frontend/menu-locale/locales/en/admin.menu-locale.json +11 -11
  25. package/frontend/menu-locale/locales/pt/admin.menu-locale.json +11 -11
  26. package/frontend/menu-screen/locales/en/admin.menu-screen.json +11 -11
  27. package/frontend/menu-screen/locales/pt/admin.menu-screen.json +11 -11
  28. package/frontend/multifactor/components/create-panel.tsx.ejs +55 -55
  29. package/frontend/multifactor/components/update-panel.tsx.ejs +70 -70
  30. package/frontend/multifactor/locales/en/admin.multifactor.json +11 -11
  31. package/frontend/multifactor/locales/pt/admin.multifactor.json +11 -11
  32. package/frontend/multifactor/react-query/handlers.ts.ejs +28 -28
  33. package/frontend/multifactor/react-query/requests.ts.ejs +59 -59
  34. package/frontend/multifactor-locale/locales/en/admin.multifactor-locale.json +11 -11
  35. package/frontend/multifactor-locale/locales/pt/admin.multifactor-locale.json +11 -11
  36. package/frontend/screen/components/create-panel.tsx.ejs +55 -55
  37. package/frontend/screen/components/update-panel.tsx.ejs +67 -67
  38. package/frontend/screen/locales/en/admin.screen.json +11 -11
  39. package/frontend/screen/locales/pt/admin.screen.json +11 -11
  40. package/frontend/screen/react-query/handlers.ts.ejs +28 -28
  41. package/frontend/screen/react-query/requests.ts.ejs +56 -56
  42. package/frontend/screen-locale/locales/en/admin.screen-locale.json +11 -11
  43. package/frontend/screen-locale/locales/pt/admin.screen-locale.json +11 -11
  44. package/frontend/translation/components/create-panel.tsx.ejs +52 -52
  45. package/frontend/translation/components/update-panel.tsx.ejs +67 -67
  46. package/frontend/translation/locales/en/admin.translation.json +11 -11
  47. package/frontend/translation/locales/pt/admin.translation.json +11 -11
  48. package/frontend/translation/react-query/handlers.ts.ejs +28 -28
  49. package/frontend/translation/react-query/requests.ts.ejs +58 -58
  50. package/frontend/translation-namespace/components/create-panel.tsx.ejs +53 -53
  51. package/frontend/translation-namespace/components/update-panel.tsx.ejs +70 -70
  52. package/frontend/translation-namespace/locales/en/admin.translation-namespace.json +11 -11
  53. package/frontend/translation-namespace/locales/pt/admin.translation-namespace.json +11 -11
  54. package/frontend/translation-namespace/react-query/handlers.ts.ejs +28 -28
  55. package/frontend/translation-namespace/react-query/requests.ts.ejs +60 -60
  56. package/frontend/user/components/create-panel.tsx.ejs +52 -52
  57. package/frontend/user/components/update-panel.tsx.ejs +64 -64
  58. package/frontend/user/locales/en/admin.user.json +11 -11
  59. package/frontend/user/locales/pt/admin.user.json +11 -11
  60. package/frontend/user/react-query/handlers.ts.ejs +28 -28
  61. package/frontend/user/react-query/requests.ts.ejs +55 -55
  62. package/hedhog.yaml +783 -783
  63. package/package.json +45 -43
  64. package/src/admin.module.ts +39 -39
  65. package/src/auth/auth.controller.ts +88 -88
  66. package/src/auth/auth.module.ts +41 -41
  67. package/src/auth/auth.service.spec.ts +196 -196
  68. package/src/auth/auth.service.ts +349 -323
  69. package/src/auth/consts/body.ts +27 -27
  70. package/src/auth/dto/change.dto.ts +19 -19
  71. package/src/auth/dto/email.dto.ts +15 -15
  72. package/src/auth/dto/forget.dto.ts +6 -6
  73. package/src/auth/dto/login.dto.ts +21 -21
  74. package/src/auth/dto/otp.dto.ts +11 -11
  75. package/src/auth/dto/reset.dto.ts +14 -14
  76. package/src/auth/enums/multifactor-type.enum.ts +4 -4
  77. package/src/auth/guards/auth.guard.ts +54 -54
  78. package/src/auth/types/user.type.ts +8 -8
  79. package/src/dto/delete.dto.ts +8 -8
  80. package/src/dto/update-ids.dto.ts +9 -9
  81. package/src/emails/index.ts +2 -0
  82. package/src/emails/lib.ts +40 -0
  83. package/src/emails/templates.ts +60 -0
  84. package/src/index.ts +20 -20
  85. package/src/menu/dto/create.dto.ts +25 -25
  86. package/src/menu/dto/order.dto.ts +8 -8
  87. package/src/menu/dto/update.dto.ts +19 -19
  88. package/src/menu/menu.controller.ts +105 -105
  89. package/src/menu/menu.module.ts +18 -18
  90. package/src/menu/menu.service.spec.ts +247 -247
  91. package/src/menu/menu.service.ts +263 -263
  92. package/src/role/dto/create.dto.ts +7 -7
  93. package/src/role/dto/update.dto.ts +4 -4
  94. package/src/role/guards/role.guard.ts +121 -121
  95. package/src/role/role.controller.ts +126 -126
  96. package/src/role/role.module.ts +28 -28
  97. package/src/role/role.service.spec.ts +417 -417
  98. package/src/role/role.service.ts +289 -289
  99. package/src/route/dto/create.dto.ts +13 -13
  100. package/src/route/dto/update.dto.ts +15 -15
  101. package/src/route/route.controller.ts +91 -91
  102. package/src/route/route.module.ts +18 -18
  103. package/src/route/route.service.spec.ts +300 -300
  104. package/src/route/route.service.ts +164 -164
  105. package/src/screen/dto/create.dto.ts +11 -11
  106. package/src/screen/dto/update.dto.ts +19 -19
  107. package/src/screen/screen.controller.ts +93 -93
  108. package/src/screen/screen.module.ts +18 -18
  109. package/src/screen/screen.service.spec.ts +298 -298
  110. package/src/screen/screen.service.ts +179 -179
  111. package/src/types/http-method.ts +8 -8
  112. package/src/user/constants/user.constants.ts +1 -1
  113. package/src/user/dto/create.dto.ts +24 -24
  114. package/src/user/dto/update.dto.ts +41 -41
  115. package/src/user/user.controller.ts +75 -75
  116. package/src/user/user.module.ts +18 -18
  117. package/src/user/user.service.spec.ts +294 -294
  118. package/src/user/user.service.ts +129 -129
  119. package/tsconfig.lib.json +9 -9
  120. package/tsconfig.production.json +20 -20
@@ -1,18 +1,18 @@
1
- import { PaginationModule } from '@hedhog/pagination';
2
- import { PrismaModule } from '@hedhog/prisma';
3
- import { Module, forwardRef } from '@nestjs/common';
4
- import { UserController } from './user.controller';
5
- import { UserService } from './user.service';
6
- import { AuthModule } from '../auth/auth.module';
7
-
8
- @Module({
9
- providers: [UserService],
10
- exports: [UserService],
11
- controllers: [UserController],
12
- imports: [
13
- forwardRef(() => AuthModule),
14
- forwardRef(() => PrismaModule),
15
- forwardRef(() => PaginationModule),
16
- ],
17
- })
18
- export class UserModule {}
1
+ import { PaginationModule } from '@hedhog/pagination';
2
+ import { PrismaModule } from '@hedhog/prisma';
3
+ import { Module, forwardRef } from '@nestjs/common';
4
+ import { UserController } from './user.controller';
5
+ import { UserService } from './user.service';
6
+ import { AuthModule } from '../auth/auth.module';
7
+
8
+ @Module({
9
+ providers: [UserService],
10
+ exports: [UserService],
11
+ controllers: [UserController],
12
+ imports: [
13
+ forwardRef(() => AuthModule),
14
+ forwardRef(() => PrismaModule),
15
+ forwardRef(() => PaginationModule),
16
+ ],
17
+ })
18
+ export class UserModule {}
@@ -1,294 +1,294 @@
1
- // import {
2
- // PageOrderDirection,
3
- // PaginationDTO,
4
- // PaginationService,
5
- // } from '@hedhog/pagination';
6
- // import { PrismaService } from '@hedhog/prisma';
7
- // import { BadRequestException } from '@nestjs/common';
8
- // import { Test, TestingModule } from '@nestjs/testing';
9
- // import { genSalt, hash } from 'bcrypt';
10
- // import { DeleteDTO } from '../dto/delete.dto';
11
- // import { UpdateIdsDTO } from '../dto/update-ids.dto';
12
- // import { SALT_ROUNDS } from './constants/user.constants';
13
- // import { CreateDTO } from './dto/create.dto';
14
- // import { UpdateDTO } from './dto/update.dto';
15
- // import { UserService } from './user.service';
16
-
17
- // jest.mock('bcrypt', () => ({
18
- // genSalt: jest.fn().mockResolvedValue('mockSalt'),
19
- // hash: jest.fn().mockResolvedValue('mockHashedPassword'),
20
- // }));
21
-
22
- // describe('UserService', () => {
23
- // let service: UserService;
24
- // let prismaService: PrismaService;
25
- // let paginationService: PaginationService;
26
-
27
- // beforeEach(async () => {
28
- // const module: TestingModule = await Test.createTestingModule({
29
- // providers: [
30
- // UserService,
31
- // {
32
- // provide: PrismaService,
33
- // useValue: {
34
- // user: {
35
- // findUnique: jest.fn(),
36
- // create: jest.fn(),
37
- // update: jest.fn(),
38
- // deleteMany: jest.fn(),
39
- // },
40
- // role_user: {
41
- // deleteMany: jest.fn(),
42
- // createMany: jest.fn(),
43
- // },
44
- // createInsensitiveSearch: jest.fn(),
45
- // },
46
- // },
47
- // {
48
- // provide: PaginationService,
49
- // useValue: {
50
- // paginate: jest.fn(),
51
- // },
52
- // },
53
- // ],
54
- // }).compile();
55
-
56
- // service = module.get<UserService>(UserService);
57
- // prismaService = module.get<PrismaService>(PrismaService);
58
- // paginationService = module.get<PaginationService>(PaginationService);
59
- // });
60
-
61
- // it('should be defined', () => {
62
- // expect(service).toBeDefined();
63
- // });
64
-
65
- // describe('listRoles', () => {
66
- // it('should return paginated role for a specific user', async () => {
67
- // const paginationParams: PaginationDTO = {
68
- // page: 1,
69
- // pageSize: 10,
70
- // search: '',
71
- // sortField: '',
72
- // sortOrder: PageOrderDirection.Asc,
73
- // fields: '',
74
- // };
75
-
76
- // const mockPaginatedRoles = {
77
- // data: [],
78
- // total: 10,
79
- // lastPage: 1,
80
- // page: 1,
81
- // prev: 0,
82
- // next: 2,
83
- // pageSize: 10,
84
- // };
85
-
86
- // jest
87
- // .spyOn(paginationService, 'paginate')
88
- // .mockResolvedValue(mockPaginatedRoles);
89
-
90
- // const result = await service.listRoles(1, paginationParams);
91
-
92
- // expect(paginationService.paginate).toHaveBeenCalledWith(
93
- // prismaService.role,
94
- // paginationParams,
95
- // {
96
- // include: {
97
- // role_user: {
98
- // where: { user_id: 1 },
99
- // select: { user_id: true, role_id: true },
100
- // },
101
- // },
102
- // },
103
- // );
104
- // expect(result).toEqual(mockPaginatedRoles);
105
- // });
106
- // });
107
-
108
- // describe('updateRoles', () => {
109
- // it('should update user role', async () => {
110
- // const updateIdsDTO: UpdateIdsDTO = { ids: [1, 2] };
111
-
112
- // jest
113
- // .spyOn(prismaService.role_user, 'deleteMany')
114
- // .mockResolvedValue({ count: 1 });
115
- // jest
116
- // .spyOn(prismaService.role_user, 'createMany')
117
- // .mockResolvedValue({ count: 2 });
118
-
119
- // await service.updateRoles(1, updateIdsDTO);
120
-
121
- // expect(prismaService.role_user.deleteMany).toHaveBeenCalledWith({
122
- // where: { user_id: 1 },
123
- // });
124
- // expect(prismaService.role_user.createMany).toHaveBeenCalledWith({
125
- // data: [
126
- // { user_id: 1, role_id: 1 },
127
- // { user_id: 1, role_id: 2 },
128
- // ],
129
- // skipDuplicates: true,
130
- // });
131
- // });
132
- // });
133
- // /*
134
- // describe('getUsers', () => {
135
- // it('should return paginated user', async () => {
136
- // const paginationParams: PaginationDTO = {
137
- // page: 1,
138
- // pageSize: 10,
139
- // search: '',
140
- // sortField: '',
141
- // sortOrder: PageOrderDirection.Asc,
142
- // fields: '',
143
- // };
144
-
145
- // const mockPaginatedUsers = {
146
- // data: [],
147
- // total: 10,
148
- // lastPage: 1,
149
- // page: 1,
150
- // prev: 0,
151
- // next: 2,
152
- // pageSize: 10,
153
- // };
154
-
155
- // jest.spyOn(prismaService, 'createInsensitiveSearch').mockReturnValue([]);
156
- // jest
157
- // .spyOn(paginationService, 'paginate')
158
- // .mockResolvedValue(mockPaginatedUsers);
159
-
160
- // const result = await service.getUsers(paginationParams);
161
-
162
- // expect(prismaService.createInsensitiveSearch).toHaveBeenCalledWith(
163
- // ['name', 'email'],
164
- // paginationParams,
165
- // );
166
- // expect(paginationService.paginate).toHaveBeenCalledWith(
167
- // prismaService.user,
168
- // paginationParams,
169
- // { where: { OR: [] } },
170
- // );
171
- // expect(result).toEqual(mockPaginatedUsers);
172
- // });
173
- // });
174
- // */
175
- // describe('get', () => {
176
- // it('should return a specific user by ID', async () => {
177
- // const mockUser = {
178
- // id: 1,
179
- // name: 'Test User',
180
- // email: 'user@email.com',
181
- // password: 'hashedpassword',
182
- // created_at: new Date(),
183
- // updated_at: new Date(),
184
- // multifactor_id: null,
185
- // code: null,
186
- // };
187
- // jest.spyOn(prismaService.user, 'findUnique').mockResolvedValue(mockUser);
188
-
189
- // const result = await service.get(1);
190
-
191
- // expect(prismaService.user.findUnique).toHaveBeenCalledWith({
192
- // where: { id: 1 },
193
- // });
194
- // expect(result).toEqual(mockUser);
195
- // });
196
- // });
197
-
198
- // describe('hashPassword', () => {
199
- // it('should hash the password correctly', async () => {
200
- // const password = 'plainPassword';
201
- // const result = await service.hashPassword(password);
202
-
203
- // expect(genSalt).toHaveBeenCalledWith(SALT_ROUNDS);
204
- // expect(hash).toHaveBeenCalledWith(password, 'mockSalt');
205
- // expect(result).toEqual('mockHashedPassword');
206
- // });
207
- // });
208
-
209
- // describe('create', () => {
210
- // it('should create a new user with hashed password', async () => {
211
- // const createDTO: CreateDTO = {
212
- // email: 'test@test.com',
213
- // name: 'Test User',
214
- // password: 'password123',
215
- // };
216
- // const mockUser = {
217
- // id: 1,
218
- // name: 'Test User',
219
- // email: 'user@email.com',
220
- // password: 'hashedpassword',
221
- // created_at: new Date(),
222
- // updated_at: new Date(),
223
- // multifactor_id: null,
224
- // code: null,
225
- // };
226
-
227
- // jest.spyOn(prismaService.user, 'create').mockResolvedValue(mockUser);
228
-
229
- // const result = await service.create(createDTO);
230
-
231
- // expect(prismaService.user.create).toHaveBeenCalledWith({
232
- // data: {
233
- // email: createDTO.email,
234
- // name: createDTO.name,
235
- // password: 'mockHashedPassword',
236
- // },
237
- // });
238
- // expect(result).toEqual(mockUser);
239
- // });
240
- // });
241
-
242
- // describe('update', () => {
243
- // it('should update an existing user', async () => {
244
- // const updateDTO: UpdateDTO = { name: 'Updated User' };
245
- // const updateInput = { id: 1, data: updateDTO };
246
- // const mockUser = {
247
- // id: 1,
248
- // name: 'Updated User',
249
- // email: 'user@email.com',
250
- // password: 'hashedpassword',
251
- // created_at: new Date(),
252
- // updated_at: new Date(),
253
- // multifactor_id: null,
254
- // code: null,
255
- // };
256
- // jest.spyOn(prismaService.user, 'update').mockResolvedValue(mockUser);
257
-
258
- // const result = await service.update(updateInput);
259
-
260
- // expect(prismaService.user.update).toHaveBeenCalledWith({
261
- // where: { id: updateInput.id },
262
- // data: updateInput.data,
263
- // });
264
- // expect(result).toEqual(mockUser);
265
- // });
266
- // });
267
-
268
- // describe('delete', () => {
269
- // it('should throw an error if no ids are provided', async () => {
270
- // const deleteDTO: DeleteDTO = { ids: null };
271
-
272
- // await expect(service.delete(deleteDTO)).rejects.toThrow(
273
- // new BadRequestException('You must select at least one user to delete.'),
274
- // );
275
- // });
276
-
277
- // it('should delete user by ids', async () => {
278
- // const deleteDTO: DeleteDTO = { ids: [1, 2] };
279
-
280
- // jest
281
- // .spyOn(prismaService.user, 'deleteMany')
282
- // .mockResolvedValue({ count: 2 });
283
-
284
- // await service.delete(deleteDTO);
285
-
286
- // expect(prismaService.user.deleteMany).toHaveBeenCalledWith({
287
- // where: {
288
- // id: { in: deleteDTO.ids },
289
- // email: { not: { startsWith: 'root@' } },
290
- // },
291
- // });
292
- // });
293
- // });
294
- // });
1
+ // import {
2
+ // PageOrderDirection,
3
+ // PaginationDTO,
4
+ // PaginationService,
5
+ // } from '@hedhog/pagination';
6
+ // import { PrismaService } from '@hedhog/prisma';
7
+ // import { BadRequestException } from '@nestjs/common';
8
+ // import { Test, TestingModule } from '@nestjs/testing';
9
+ // import { genSalt, hash } from 'bcrypt';
10
+ // import { DeleteDTO } from '../dto/delete.dto';
11
+ // import { UpdateIdsDTO } from '../dto/update-ids.dto';
12
+ // import { SALT_ROUNDS } from './constants/user.constants';
13
+ // import { CreateDTO } from './dto/create.dto';
14
+ // import { UpdateDTO } from './dto/update.dto';
15
+ // import { UserService } from './user.service';
16
+
17
+ // jest.mock('bcrypt', () => ({
18
+ // genSalt: jest.fn().mockResolvedValue('mockSalt'),
19
+ // hash: jest.fn().mockResolvedValue('mockHashedPassword'),
20
+ // }));
21
+
22
+ // describe('UserService', () => {
23
+ // let service: UserService;
24
+ // let prismaService: PrismaService;
25
+ // let paginationService: PaginationService;
26
+
27
+ // beforeEach(async () => {
28
+ // const module: TestingModule = await Test.createTestingModule({
29
+ // providers: [
30
+ // UserService,
31
+ // {
32
+ // provide: PrismaService,
33
+ // useValue: {
34
+ // user: {
35
+ // findUnique: jest.fn(),
36
+ // create: jest.fn(),
37
+ // update: jest.fn(),
38
+ // deleteMany: jest.fn(),
39
+ // },
40
+ // role_user: {
41
+ // deleteMany: jest.fn(),
42
+ // createMany: jest.fn(),
43
+ // },
44
+ // createInsensitiveSearch: jest.fn(),
45
+ // },
46
+ // },
47
+ // {
48
+ // provide: PaginationService,
49
+ // useValue: {
50
+ // paginate: jest.fn(),
51
+ // },
52
+ // },
53
+ // ],
54
+ // }).compile();
55
+
56
+ // service = module.get<UserService>(UserService);
57
+ // prismaService = module.get<PrismaService>(PrismaService);
58
+ // paginationService = module.get<PaginationService>(PaginationService);
59
+ // });
60
+
61
+ // it('should be defined', () => {
62
+ // expect(service).toBeDefined();
63
+ // });
64
+
65
+ // describe('listRoles', () => {
66
+ // it('should return paginated role for a specific user', async () => {
67
+ // const paginationParams: PaginationDTO = {
68
+ // page: 1,
69
+ // pageSize: 10,
70
+ // search: '',
71
+ // sortField: '',
72
+ // sortOrder: PageOrderDirection.Asc,
73
+ // fields: '',
74
+ // };
75
+
76
+ // const mockPaginatedRoles = {
77
+ // data: [],
78
+ // total: 10,
79
+ // lastPage: 1,
80
+ // page: 1,
81
+ // prev: 0,
82
+ // next: 2,
83
+ // pageSize: 10,
84
+ // };
85
+
86
+ // jest
87
+ // .spyOn(paginationService, 'paginate')
88
+ // .mockResolvedValue(mockPaginatedRoles);
89
+
90
+ // const result = await service.listRoles(1, paginationParams);
91
+
92
+ // expect(paginationService.paginate).toHaveBeenCalledWith(
93
+ // prismaService.role,
94
+ // paginationParams,
95
+ // {
96
+ // include: {
97
+ // role_user: {
98
+ // where: { user_id: 1 },
99
+ // select: { user_id: true, role_id: true },
100
+ // },
101
+ // },
102
+ // },
103
+ // );
104
+ // expect(result).toEqual(mockPaginatedRoles);
105
+ // });
106
+ // });
107
+
108
+ // describe('updateRoles', () => {
109
+ // it('should update user role', async () => {
110
+ // const updateIdsDTO: UpdateIdsDTO = { ids: [1, 2] };
111
+
112
+ // jest
113
+ // .spyOn(prismaService.role_user, 'deleteMany')
114
+ // .mockResolvedValue({ count: 1 });
115
+ // jest
116
+ // .spyOn(prismaService.role_user, 'createMany')
117
+ // .mockResolvedValue({ count: 2 });
118
+
119
+ // await service.updateRoles(1, updateIdsDTO);
120
+
121
+ // expect(prismaService.role_user.deleteMany).toHaveBeenCalledWith({
122
+ // where: { user_id: 1 },
123
+ // });
124
+ // expect(prismaService.role_user.createMany).toHaveBeenCalledWith({
125
+ // data: [
126
+ // { user_id: 1, role_id: 1 },
127
+ // { user_id: 1, role_id: 2 },
128
+ // ],
129
+ // skipDuplicates: true,
130
+ // });
131
+ // });
132
+ // });
133
+ // /*
134
+ // describe('getUsers', () => {
135
+ // it('should return paginated user', async () => {
136
+ // const paginationParams: PaginationDTO = {
137
+ // page: 1,
138
+ // pageSize: 10,
139
+ // search: '',
140
+ // sortField: '',
141
+ // sortOrder: PageOrderDirection.Asc,
142
+ // fields: '',
143
+ // };
144
+
145
+ // const mockPaginatedUsers = {
146
+ // data: [],
147
+ // total: 10,
148
+ // lastPage: 1,
149
+ // page: 1,
150
+ // prev: 0,
151
+ // next: 2,
152
+ // pageSize: 10,
153
+ // };
154
+
155
+ // jest.spyOn(prismaService, 'createInsensitiveSearch').mockReturnValue([]);
156
+ // jest
157
+ // .spyOn(paginationService, 'paginate')
158
+ // .mockResolvedValue(mockPaginatedUsers);
159
+
160
+ // const result = await service.getUsers(paginationParams);
161
+
162
+ // expect(prismaService.createInsensitiveSearch).toHaveBeenCalledWith(
163
+ // ['name', 'email'],
164
+ // paginationParams,
165
+ // );
166
+ // expect(paginationService.paginate).toHaveBeenCalledWith(
167
+ // prismaService.user,
168
+ // paginationParams,
169
+ // { where: { OR: [] } },
170
+ // );
171
+ // expect(result).toEqual(mockPaginatedUsers);
172
+ // });
173
+ // });
174
+ // */
175
+ // describe('get', () => {
176
+ // it('should return a specific user by ID', async () => {
177
+ // const mockUser = {
178
+ // id: 1,
179
+ // name: 'Test User',
180
+ // email: 'user@email.com',
181
+ // password: 'hashedpassword',
182
+ // created_at: new Date(),
183
+ // updated_at: new Date(),
184
+ // multifactor_id: null,
185
+ // code: null,
186
+ // };
187
+ // jest.spyOn(prismaService.user, 'findUnique').mockResolvedValue(mockUser);
188
+
189
+ // const result = await service.get(1);
190
+
191
+ // expect(prismaService.user.findUnique).toHaveBeenCalledWith({
192
+ // where: { id: 1 },
193
+ // });
194
+ // expect(result).toEqual(mockUser);
195
+ // });
196
+ // });
197
+
198
+ // describe('hashPassword', () => {
199
+ // it('should hash the password correctly', async () => {
200
+ // const password = 'plainPassword';
201
+ // const result = await service.hashPassword(password);
202
+
203
+ // expect(genSalt).toHaveBeenCalledWith(SALT_ROUNDS);
204
+ // expect(hash).toHaveBeenCalledWith(password, 'mockSalt');
205
+ // expect(result).toEqual('mockHashedPassword');
206
+ // });
207
+ // });
208
+
209
+ // describe('create', () => {
210
+ // it('should create a new user with hashed password', async () => {
211
+ // const createDTO: CreateDTO = {
212
+ // email: 'test@test.com',
213
+ // name: 'Test User',
214
+ // password: 'password123',
215
+ // };
216
+ // const mockUser = {
217
+ // id: 1,
218
+ // name: 'Test User',
219
+ // email: 'user@email.com',
220
+ // password: 'hashedpassword',
221
+ // created_at: new Date(),
222
+ // updated_at: new Date(),
223
+ // multifactor_id: null,
224
+ // code: null,
225
+ // };
226
+
227
+ // jest.spyOn(prismaService.user, 'create').mockResolvedValue(mockUser);
228
+
229
+ // const result = await service.create(createDTO);
230
+
231
+ // expect(prismaService.user.create).toHaveBeenCalledWith({
232
+ // data: {
233
+ // email: createDTO.email,
234
+ // name: createDTO.name,
235
+ // password: 'mockHashedPassword',
236
+ // },
237
+ // });
238
+ // expect(result).toEqual(mockUser);
239
+ // });
240
+ // });
241
+
242
+ // describe('update', () => {
243
+ // it('should update an existing user', async () => {
244
+ // const updateDTO: UpdateDTO = { name: 'Updated User' };
245
+ // const updateInput = { id: 1, data: updateDTO };
246
+ // const mockUser = {
247
+ // id: 1,
248
+ // name: 'Updated User',
249
+ // email: 'user@email.com',
250
+ // password: 'hashedpassword',
251
+ // created_at: new Date(),
252
+ // updated_at: new Date(),
253
+ // multifactor_id: null,
254
+ // code: null,
255
+ // };
256
+ // jest.spyOn(prismaService.user, 'update').mockResolvedValue(mockUser);
257
+
258
+ // const result = await service.update(updateInput);
259
+
260
+ // expect(prismaService.user.update).toHaveBeenCalledWith({
261
+ // where: { id: updateInput.id },
262
+ // data: updateInput.data,
263
+ // });
264
+ // expect(result).toEqual(mockUser);
265
+ // });
266
+ // });
267
+
268
+ // describe('delete', () => {
269
+ // it('should throw an error if no ids are provided', async () => {
270
+ // const deleteDTO: DeleteDTO = { ids: null };
271
+
272
+ // await expect(service.delete(deleteDTO)).rejects.toThrow(
273
+ // new BadRequestException('You must select at least one user to delete.'),
274
+ // );
275
+ // });
276
+
277
+ // it('should delete user by ids', async () => {
278
+ // const deleteDTO: DeleteDTO = { ids: [1, 2] };
279
+
280
+ // jest
281
+ // .spyOn(prismaService.user, 'deleteMany')
282
+ // .mockResolvedValue({ count: 2 });
283
+
284
+ // await service.delete(deleteDTO);
285
+
286
+ // expect(prismaService.user.deleteMany).toHaveBeenCalledWith({
287
+ // where: {
288
+ // id: { in: deleteDTO.ids },
289
+ // email: { not: { startsWith: 'root@' } },
290
+ // },
291
+ // });
292
+ // });
293
+ // });
294
+ // });