diff --git a/apps/server/src/resources/admin-role/business.spec.ts b/apps/server/src/resources/admin-role/business.spec.ts index edb3bad17..11ab14b35 100644 --- a/apps/server/src/resources/admin-role/business.spec.ts +++ b/apps/server/src/resources/admin-role/business.spec.ts @@ -42,7 +42,8 @@ describe('test admin-role business', () => { prisma.adminRole.findFirst.mockResolvedValueOnce(dbRole) prisma.adminRole.findMany.mockResolvedValueOnce([dbRole]) prisma.adminRole.create.mockResolvedValue(dbRole) - await createRole({ name: 'test' }) + hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} }) + await createRole({ name: 'test' }, faker.string.uuid()) expect(prisma.adminRole.create).toHaveBeenCalledWith({ data: { name: 'test', permissions: 0n, position: 1 } }) }) @@ -60,7 +61,8 @@ describe('test admin-role business', () => { prisma.adminRole.findFirst.mockResolvedValueOnce(dbRole) prisma.adminRole.findMany.mockResolvedValueOnce([dbRole]) prisma.adminRole.create.mockResolvedValue(dbRole) - await createRole({ name: 'test' }) + hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} }) + await createRole({ name: 'test' }, faker.string.uuid()) expect(prisma.adminRole.create).toHaveBeenCalledWith({ data: { name: 'test', permissions: 0n, position: 51 } }) }) @@ -78,7 +80,8 @@ describe('test admin-role business', () => { prisma.adminRole.findFirst.mockResolvedValueOnce(null) prisma.adminRole.findMany.mockResolvedValueOnce([dbRole]) prisma.adminRole.create.mockResolvedValue(dbRole) - await createRole({ name: 'test' }) + hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} }) + await createRole({ name: 'test' }, faker.string.uuid()) expect(prisma.adminRole.create).toHaveBeenCalledWith({ data: { name: 'test', permissions: 0n, position: 0 } }) }) @@ -121,7 +124,8 @@ describe('test admin-role business', () => { prisma.adminRole.findMany.mockResolvedValueOnce([]) prisma.adminRole.findUnique.mockResolvedValueOnce(dbRole) prisma.adminRole.create.mockResolvedValue(dbRole) - await deleteRole(roleId) + hook.adminRole.delete.mockResolvedValue({ args: {}, failed: false, results: {} }) + await deleteRole(roleId, faker.string.uuid()) expect(prisma.user.findMany).toHaveBeenCalledTimes(2) expect(prisma.user.update).toHaveBeenNthCalledWith(1, { where: { id: users[0].id }, data: { adminRoleIds: [] } }) @@ -137,7 +141,7 @@ describe('test admin-role business', () => { prisma.adminRole.findUnique.mockResolvedValue(systemRole as any) prisma.user.findMany.mockResolvedValue([]) - const response = await deleteRole(roleId) + const response = await deleteRole(roleId, faker.string.uuid()) expect(response).toBeInstanceOf(Forbidden403) expect(prisma.adminRole.delete).not.toHaveBeenCalled() }) @@ -223,7 +227,7 @@ describe('test admin-role business', () => { name: 'New Admin Name', }] - const result = await patchRoles(updateRoles) + const result = await patchRoles(updateRoles, faker.string.uuid()) await expect(result).toBeInstanceOf(Forbidden403) expect(prisma.adminRole.update).toHaveBeenCalledTimes(0) @@ -231,7 +235,7 @@ describe('test admin-role business', () => { it('should do nothing', async () => { prisma.adminRole.findMany.mockResolvedValue([]) - await patchRoles([]) + await patchRoles([], faker.string.uuid()) expect(prisma.adminRole.update).toHaveBeenCalledTimes(0) }) @@ -242,7 +246,7 @@ describe('test admin-role business', () => { ] prisma.adminRole.findMany.mockResolvedValue(dbRoles) - const response = await patchRoles(updateRoles) + const response = await patchRoles(updateRoles, faker.string.uuid()) expect(response).instanceOf(BadRequest400) expect(prisma.adminRole.update).toHaveBeenCalledTimes(0) @@ -253,7 +257,7 @@ describe('test admin-role business', () => { ] prisma.adminRole.findMany.mockResolvedValue(dbRoles) - const response = await patchRoles(updateRoles) + const response = await patchRoles(updateRoles, faker.string.uuid()) expect(response).instanceOf(BadRequest400) expect(prisma.adminRole.update).toHaveBeenCalledTimes(0) @@ -264,9 +268,8 @@ describe('test admin-role business', () => { { id: dbRoles[1].id, position: 0 }, ] prisma.adminRole.findMany.mockResolvedValue(dbRoles) - - await patchRoles(updateRoles) - + hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} }) + await patchRoles(updateRoles, faker.string.uuid()) expect(prisma.adminRole.update).toHaveBeenCalledTimes(2) }) it('should update permissions', async () => { @@ -274,9 +277,8 @@ describe('test admin-role business', () => { { id: dbRoles[1].id, permissions: '0' }, ] prisma.adminRole.findMany.mockResolvedValue(dbRoles) - - await patchRoles(updateRoles) - + hook.adminRole.upsert.mockResolvedValue({ args: {}, failed: false, results: {} }) + await patchRoles(updateRoles, faker.string.uuid()) expect(prisma.adminRole.update).toHaveBeenCalledTimes(1) expect(prisma.adminRole.update).toHaveBeenCalledWith({ data: { @@ -302,7 +304,7 @@ describe('test admin-role business', () => { } prisma.adminRole.findMany.mockResolvedValue([systemRole as any]) - const response = await patchRoles([{ id: systemRole.id, name: 'new name' }]) + const response = await patchRoles([{ id: systemRole.id, name: 'new name' }], faker.string.uuid()) expect(response).toBeInstanceOf(Forbidden403) expect(prisma.adminRole.update).not.toHaveBeenCalled() }) diff --git a/apps/server/src/resources/admin-role/business.ts b/apps/server/src/resources/admin-role/business.ts index 360743a46..21a9c2116 100644 --- a/apps/server/src/resources/admin-role/business.ts +++ b/apps/server/src/resources/admin-role/business.ts @@ -1,9 +1,6 @@ import type { Project, ProjectRole } from '@prisma/client' import type { AdminRole, adminRoleContract } from '@cpn-console/shared' -import { - getAdminRoleById, - listAdminRoles, -} from '@/resources/queries-index.js' +import { addLogs, getAdminRoleById, listAdminRoles } from '@/resources/queries-index.js' import type { ErrorResType } from '@/utils/errors.js' import { BadRequest400, Forbidden403 } from '@/utils/errors.js' import prisma from '@/prisma.js' @@ -14,7 +11,10 @@ export async function listRoles() { .then(roles => roles.map(role => ({ ...role, permissions: role.permissions.toString(), type: role.type ?? 'custom' }))) } -export async function patchRoles(roles: typeof adminRoleContract.patchAdminRoles.body._type): Promise { +export async function patchRoles( + roles: typeof adminRoleContract.patchAdminRoles.body._type, + requestId: string, +): Promise { const dbRoles = await prisma.adminRole.findMany() const positionsAvailable: number[] = [] const updatedRoles: (Omit & { permissions: bigint })[] = [] @@ -46,13 +46,17 @@ export async function patchRoles(roles: typeof adminRoleContract.patchAdminRoles return new Forbidden403('Ce rôle système ne peut pas être renommé') } await prisma.adminRole.update({ where: { id }, data: role }) - await hook.adminRole.upsert(id) + const hookReply = await hook.adminRole.upsert(id) + await addLogs({ action: 'Update Admin Role', data: hookReply, requestId }) } return listRoles() } -export async function createRole(role: typeof adminRoleContract.createAdminRole.body._type) { +export async function createRole( + role: typeof adminRoleContract.createAdminRole.body._type, + requestId: string, +) { const dbMaxPosRole = (await prisma.adminRole.findFirst({ orderBy: { position: 'desc' }, select: { position: true }, @@ -66,7 +70,8 @@ export async function createRole(role: typeof adminRoleContract.createAdminRole. }, }) - await hook.adminRole.upsert(createdRole.id) + const hookReply = await hook.adminRole.upsert(createdRole.id) + await addLogs({ action: 'Create Admin Role', data: hookReply, requestId }) return listRoles() } @@ -87,11 +92,15 @@ export async function countRolesMembers() { return rolesCounts } -export async function deleteRole(roleId: Project['id']) { +export async function deleteRole( + roleId: Project['id'], + requestId: string, +) { const role = await getAdminRoleById(roleId) if (role) { if (role.type === 'system') return new Forbidden403('Impossible de supprimer un rôle système') - await hook.adminRole.delete(role) + const hookReply = await hook.adminRole.delete(role) + await addLogs({ action: 'Delete Admin Role', data: hookReply, requestId }) } const allUsers = await prisma.user.findMany({ diff --git a/apps/server/src/resources/admin-role/router.spec.ts b/apps/server/src/resources/admin-role/router.spec.ts index f23880cdf..065b0d9e1 100644 --- a/apps/server/src/resources/admin-role/router.spec.ts +++ b/apps/server/src/resources/admin-role/router.spec.ts @@ -49,7 +49,7 @@ describe('test adminRoleContract', () => { .body(roleData) .end() - expect(businessCreateRoleMock).toHaveBeenCalledWith(roleData) + expect(businessCreateRoleMock).toHaveBeenCalledWith(roleData, expect.any(String)) expect(response.json()).toEqual(newRole) expect(response.statusCode).toEqual(201) }) @@ -83,7 +83,7 @@ describe('test adminRoleContract', () => { .body(rolesData) .end() - expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData) + expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData, expect.any(String)) expect(response.json()).toEqual(updatedRoles) expect(response.statusCode).toEqual(200) }) @@ -99,7 +99,7 @@ describe('test adminRoleContract', () => { .body(rolesData) .end() - expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData) + expect(businessPatchRolesMock).toHaveBeenCalledWith(rolesData, expect.any(String)) expect(response.statusCode).toEqual(400) }) @@ -161,7 +161,7 @@ describe('test adminRoleContract', () => { .delete(adminRoleContract.deleteAdminRole.path.replace(':roleId', roleId)) .end() - expect(businessDeleteRoleMock).toHaveBeenCalledWith(roleId) + expect(businessDeleteRoleMock).toHaveBeenCalledWith(roleId, expect.any(String)) expect(response.statusCode).toEqual(204) }) diff --git a/apps/server/src/resources/admin-role/router.ts b/apps/server/src/resources/admin-role/router.ts index da758c0e9..f7405c7d9 100644 --- a/apps/server/src/resources/admin-role/router.ts +++ b/apps/server/src/resources/admin-role/router.ts @@ -26,7 +26,7 @@ export function adminRoleRouter() { const perms = await authUser(req) if (!AdminAuthorized.isAdmin(perms.adminPermissions)) return new Forbidden403() - const resBody = await createRole(body) + const resBody = await createRole(body, req.id) return { status: 201, @@ -38,7 +38,7 @@ export function adminRoleRouter() { const perms = await authUser(req) if (!AdminAuthorized.isAdmin(perms.adminPermissions)) return new Forbidden403() - const resBody = await patchRoles(body) + const resBody = await patchRoles(body, req.id) if (resBody instanceof ErrorResType) return resBody return { @@ -63,7 +63,7 @@ export function adminRoleRouter() { const perms = await authUser(req) if (!AdminAuthorized.isAdmin(perms.adminPermissions)) return new Forbidden403() - const resBody = await deleteRole(params.roleId) + const resBody = await deleteRole(params.roleId, req.id) if (resBody instanceof ErrorResType) return resBody return {