From 1d2865efed8a54da6c192955cabf90b4d01a48f4 Mon Sep 17 00:00:00 2001 From: Mohamed Marrouchi Date: Wed, 25 Sep 2024 16:59:57 +0100 Subject: [PATCH] fix: delete role permissions --- .../user/repositories/role.repository.spec.ts | 35 +++++++++++++++++-- api/src/user/repositories/role.repository.ts | 2 +- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/api/src/user/repositories/role.repository.spec.ts b/api/src/user/repositories/role.repository.spec.ts index 932dc1b7..d63334c5 100644 --- a/api/src/user/repositories/role.repository.spec.ts +++ b/api/src/user/repositories/role.repository.spec.ts @@ -24,8 +24,8 @@ import { PermissionRepository } from '../repositories/permission.repository'; import { RoleRepository } from '../repositories/role.repository'; import { UserRepository } from '../repositories/user.repository'; import { PermissionModel } from '../schemas/permission.schema'; -import { RoleModel, Role } from '../schemas/role.schema'; -import { UserModel, User } from '../schemas/user.schema'; +import { Role, RoleModel } from '../schemas/role.schema'; +import { User, UserModel } from '../schemas/user.schema'; describe('RoleRepository', () => { let roleRepository: RoleRepository; @@ -34,6 +34,7 @@ describe('RoleRepository', () => { let roleModel: Model; let role: Role; let users: User[]; + let roleToDelete: Role; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -57,6 +58,9 @@ describe('RoleRepository', () => { users = (await userRepository.findAll()).filter((user) => user.roles.includes(role.id), ); + roleToDelete = await roleRepository.findOne({ + name: 'manager', + }); }); afterAll(async () => { @@ -106,4 +110,31 @@ describe('RoleRepository', () => { expect(result).toEqualPayload(rolesWithPermissionsAndUsers); }); }); + + describe('deleteOne', () => { + it('should delete a role by id', async () => { + jest.spyOn(roleModel, 'deleteOne'); + const result = await roleRepository.deleteOne(roleToDelete.id); + + expect(roleModel.deleteOne).toHaveBeenCalledWith({ + _id: roleToDelete.id, + }); + expect(result).toEqual({ + acknowledged: true, + deletedCount: 1, + }); + + const permissions = await permissionRepository.find({ + role: roleToDelete.id, + }); + expect(permissions.length).toEqual(0); + }); + + it('should fail to delete a role that does not exist', async () => { + expect(await roleRepository.deleteOne(roleToDelete.id)).toEqual({ + acknowledged: true, + deletedCount: 0, + }); + }); + }); }); diff --git a/api/src/user/repositories/role.repository.ts b/api/src/user/repositories/role.repository.ts index d4336cb8..0c05b812 100644 --- a/api/src/user/repositories/role.repository.ts +++ b/api/src/user/repositories/role.repository.ts @@ -96,7 +96,7 @@ export class RoleRepository extends BaseRepository< * * @returns The result of the delete operation. */ - async deleteOneQuery(id: string) { + async deleteOne(id: string) { const result = await this.model.deleteOne({ _id: id }).exec(); if (result.deletedCount > 0) { await this.permissionModel.deleteMany({ role: id });