Skip to content

Commit 01d98fc

Browse files
committed
chore(admin-role): add logs
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
1 parent a6352c1 commit 01d98fc

4 files changed

Lines changed: 44 additions & 33 deletions

File tree

apps/server/src/resources/admin-role/business.spec.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ describe('test admin-role business', () => {
4242
prisma.adminRole.findFirst.mockResolvedValueOnce(dbRole)
4343
prisma.adminRole.findMany.mockResolvedValueOnce([dbRole])
4444
prisma.adminRole.create.mockResolvedValue(dbRole)
45-
await createRole({ name: 'test' })
45+
hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} })
46+
await createRole({ name: 'test' }, faker.string.uuid())
4647

4748
expect(prisma.adminRole.create).toHaveBeenCalledWith({ data: { name: 'test', permissions: 0n, position: 1 } })
4849
})
@@ -60,7 +61,8 @@ describe('test admin-role business', () => {
6061
prisma.adminRole.findFirst.mockResolvedValueOnce(dbRole)
6162
prisma.adminRole.findMany.mockResolvedValueOnce([dbRole])
6263
prisma.adminRole.create.mockResolvedValue(dbRole)
63-
await createRole({ name: 'test' })
64+
hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} })
65+
await createRole({ name: 'test' }, faker.string.uuid())
6466

6567
expect(prisma.adminRole.create).toHaveBeenCalledWith({ data: { name: 'test', permissions: 0n, position: 51 } })
6668
})
@@ -78,7 +80,8 @@ describe('test admin-role business', () => {
7880
prisma.adminRole.findFirst.mockResolvedValueOnce(null)
7981
prisma.adminRole.findMany.mockResolvedValueOnce([dbRole])
8082
prisma.adminRole.create.mockResolvedValue(dbRole)
81-
await createRole({ name: 'test' })
83+
hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} })
84+
await createRole({ name: 'test' }, faker.string.uuid())
8285

8386
expect(prisma.adminRole.create).toHaveBeenCalledWith({ data: { name: 'test', permissions: 0n, position: 0 } })
8487
})
@@ -121,7 +124,8 @@ describe('test admin-role business', () => {
121124
prisma.adminRole.findMany.mockResolvedValueOnce([])
122125
prisma.adminRole.findUnique.mockResolvedValueOnce(dbRole)
123126
prisma.adminRole.create.mockResolvedValue(dbRole)
124-
await deleteRole(roleId)
127+
hook.adminRole.delete.mockResolvedValue({ args: {}, failed: false, results: {} })
128+
await deleteRole(roleId, faker.string.uuid())
125129

126130
expect(prisma.user.findMany).toHaveBeenCalledTimes(2)
127131
expect(prisma.user.update).toHaveBeenNthCalledWith(1, { where: { id: users[0].id }, data: { adminRoleIds: [] } })
@@ -137,7 +141,7 @@ describe('test admin-role business', () => {
137141
prisma.adminRole.findUnique.mockResolvedValue(systemRole as any)
138142
prisma.user.findMany.mockResolvedValue([])
139143

140-
const response = await deleteRole(roleId)
144+
const response = await deleteRole(roleId, faker.string.uuid())
141145
expect(response).toBeInstanceOf(Forbidden403)
142146
expect(prisma.adminRole.delete).not.toHaveBeenCalled()
143147
})
@@ -223,15 +227,15 @@ describe('test admin-role business', () => {
223227
name: 'New Admin Name',
224228
}]
225229

226-
const result = await patchRoles(updateRoles)
230+
const result = await patchRoles(updateRoles, faker.string.uuid())
227231

228232
await expect(result).toBeInstanceOf(Forbidden403)
229233
expect(prisma.adminRole.update).toHaveBeenCalledTimes(0)
230234
})
231235

232236
it('should do nothing', async () => {
233237
prisma.adminRole.findMany.mockResolvedValue([])
234-
await patchRoles([])
238+
await patchRoles([], faker.string.uuid())
235239
expect(prisma.adminRole.update).toHaveBeenCalledTimes(0)
236240
})
237241

@@ -242,7 +246,7 @@ describe('test admin-role business', () => {
242246
]
243247
prisma.adminRole.findMany.mockResolvedValue(dbRoles)
244248

245-
const response = await patchRoles(updateRoles)
249+
const response = await patchRoles(updateRoles, faker.string.uuid())
246250

247251
expect(response).instanceOf(BadRequest400)
248252
expect(prisma.adminRole.update).toHaveBeenCalledTimes(0)
@@ -253,7 +257,7 @@ describe('test admin-role business', () => {
253257
]
254258
prisma.adminRole.findMany.mockResolvedValue(dbRoles)
255259

256-
const response = await patchRoles(updateRoles)
260+
const response = await patchRoles(updateRoles, faker.string.uuid())
257261

258262
expect(response).instanceOf(BadRequest400)
259263
expect(prisma.adminRole.update).toHaveBeenCalledTimes(0)
@@ -264,19 +268,17 @@ describe('test admin-role business', () => {
264268
{ id: dbRoles[1].id, position: 0 },
265269
]
266270
prisma.adminRole.findMany.mockResolvedValue(dbRoles)
267-
268-
await patchRoles(updateRoles)
269-
271+
hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} })
272+
await patchRoles(updateRoles, faker.string.uuid())
270273
expect(prisma.adminRole.update).toHaveBeenCalledTimes(2)
271274
})
272275
it('should update permissions', async () => {
273276
const updateRoles: (Pick<AdminRole, 'id'> & { permissions?: string })[] = [
274277
{ id: dbRoles[1].id, permissions: '0' },
275278
]
276279
prisma.adminRole.findMany.mockResolvedValue(dbRoles)
277-
278-
await patchRoles(updateRoles)
279-
280+
hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} })
281+
await patchRoles(updateRoles, faker.string.uuid())
280282
expect(prisma.adminRole.update).toHaveBeenCalledTimes(1)
281283
expect(prisma.adminRole.update).toHaveBeenCalledWith({
282284
data: {
@@ -302,7 +304,7 @@ describe('test admin-role business', () => {
302304
}
303305
prisma.adminRole.findMany.mockResolvedValue([systemRole as any])
304306

305-
const response = await patchRoles([{ id: systemRole.id, name: 'new name' }])
307+
const response = await patchRoles([{ id: systemRole.id, name: 'new name' }], faker.string.uuid())
306308
expect(response).toBeInstanceOf(Forbidden403)
307309
expect(prisma.adminRole.update).not.toHaveBeenCalled()
308310
})

apps/server/src/resources/admin-role/business.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import type { Project, ProjectRole } from '@prisma/client'
22
import type { AdminRole, adminRoleContract } from '@cpn-console/shared'
3-
import {
4-
getAdminRoleById,
5-
listAdminRoles,
6-
} from '@/resources/queries-index.js'
3+
import { addLogs, getAdminRoleById, listAdminRoles } from '@/resources/queries-index.js'
74
import type { ErrorResType } from '@/utils/errors.js'
85
import { BadRequest400, Forbidden403 } from '@/utils/errors.js'
96
import prisma from '@/prisma.js'
@@ -14,7 +11,10 @@ export async function listRoles() {
1411
.then(roles => roles.map(role => ({ ...role, permissions: role.permissions.toString(), type: role.type ?? 'custom' })))
1512
}
1613

17-
export async function patchRoles(roles: typeof adminRoleContract.patchAdminRoles.body._type): Promise<AdminRole[] | ErrorResType> {
14+
export async function patchRoles(
15+
roles: typeof adminRoleContract.patchAdminRoles.body._type,
16+
requestId: string,
17+
): Promise<AdminRole[] | ErrorResType> {
1818
const dbRoles = await prisma.adminRole.findMany()
1919
const positionsAvailable: number[] = []
2020
const updatedRoles: (Omit<AdminRole, 'permissions'> & { permissions: bigint })[] = []
@@ -46,13 +46,17 @@ export async function patchRoles(roles: typeof adminRoleContract.patchAdminRoles
4646
return new Forbidden403('Ce rôle système ne peut pas être renommé')
4747
}
4848
await prisma.adminRole.update({ where: { id }, data: role })
49-
await hook.adminRole.upsert(id)
49+
const hookReply = await hook.adminRole.upsert(id)
50+
await addLogs({ action: 'Update Admin Role', data: hookReply, requestId })
5051
}
5152

5253
return listRoles()
5354
}
5455

55-
export async function createRole(role: typeof adminRoleContract.createAdminRole.body._type) {
56+
export async function createRole(
57+
role: typeof adminRoleContract.createAdminRole.body._type,
58+
requestId: string,
59+
) {
5660
const dbMaxPosRole = (await prisma.adminRole.findFirst({
5761
orderBy: { position: 'desc' },
5862
select: { position: true },
@@ -66,7 +70,8 @@ export async function createRole(role: typeof adminRoleContract.createAdminRole.
6670
},
6771
})
6872

69-
await hook.adminRole.upsert(createdRole.id)
73+
const hookReply = await hook.adminRole.upsert(createdRole.id)
74+
await addLogs({ action: 'Create Admin Role', data: hookReply, requestId })
7075

7176
return listRoles()
7277
}
@@ -87,11 +92,15 @@ export async function countRolesMembers() {
8792
return rolesCounts
8893
}
8994

90-
export async function deleteRole(roleId: Project['id']) {
95+
export async function deleteRole(
96+
roleId: Project['id'],
97+
requestId: string,
98+
) {
9199
const role = await getAdminRoleById(roleId)
92100
if (role) {
93101
if (role.type === 'system') return new Forbidden403('Impossible de supprimer un rôle système')
94-
await hook.adminRole.delete(role)
102+
const hookReply = await hook.adminRole.delete(role)
103+
await addLogs({ action: 'Delete Admin Role', data: hookReply, requestId })
95104
}
96105

97106
const allUsers = await prisma.user.findMany({

apps/server/src/resources/admin-role/router.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ describe('test adminRoleContract', () => {
4949
.body(roleData)
5050
.end()
5151

52-
expect(businessCreateRoleMock).toHaveBeenCalledWith(roleData)
52+
expect(businessCreateRoleMock).toHaveBeenCalledWith(roleData, expect.any(String))
5353
expect(response.json()).toEqual(newRole)
5454
expect(response.statusCode).toEqual(201)
5555
})
@@ -83,7 +83,7 @@ describe('test adminRoleContract', () => {
8383
.body(rolesData)
8484
.end()
8585

86-
expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData)
86+
expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData, expect.any(String))
8787
expect(response.json()).toEqual(updatedRoles)
8888
expect(response.statusCode).toEqual(200)
8989
})
@@ -99,7 +99,7 @@ describe('test adminRoleContract', () => {
9999
.body(rolesData)
100100
.end()
101101

102-
expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData)
102+
expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData, expect.any(String))
103103
expect(response.statusCode).toEqual(400)
104104
})
105105

@@ -161,7 +161,7 @@ describe('test adminRoleContract', () => {
161161
.delete(adminRoleContract.deleteAdminRole.path.replace(':roleId', roleId))
162162
.end()
163163

164-
expect(businessDeleteRoleMock).toHaveBeenCalledWith(roleId)
164+
expect(businessDeleteRoleMock).toHaveBeenCalledWith(roleId, expect.any(String))
165165
expect(response.statusCode).toEqual(204)
166166
})
167167

apps/server/src/resources/admin-role/router.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function adminRoleRouter() {
2626
const perms = await authUser(req)
2727
if (!AdminAuthorized.isAdmin(perms.adminPermissions)) return new Forbidden403()
2828

29-
const resBody = await createRole(body)
29+
const resBody = await createRole(body, req.id)
3030

3131
return {
3232
status: 201,
@@ -38,7 +38,7 @@ export function adminRoleRouter() {
3838
const perms = await authUser(req)
3939
if (!AdminAuthorized.isAdmin(perms.adminPermissions)) return new Forbidden403()
4040

41-
const resBody = await patchRoles(body)
41+
const resBody = await patchRoles(body, req.id)
4242
if (resBody instanceof ErrorResType) return resBody
4343

4444
return {
@@ -63,7 +63,7 @@ export function adminRoleRouter() {
6363
const perms = await authUser(req)
6464
if (!AdminAuthorized.isAdmin(perms.adminPermissions)) return new Forbidden403()
6565

66-
const resBody = await deleteRole(params.roleId)
66+
const resBody = await deleteRole(params.roleId, req.id)
6767
if (resBody instanceof ErrorResType) return resBody
6868

6969
return {

0 commit comments

Comments
 (0)