Merge pull request #85 from Hexastack/fix/delete-role

fix: delete role permissions
This commit is contained in:
Mohamed Marrouchi 2024-09-26 16:29:25 +01:00 committed by GitHub
commit 9d2b6d57a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 3 deletions

View File

@ -24,8 +24,8 @@ import { PermissionRepository } from '../repositories/permission.repository';
import { RoleRepository } from '../repositories/role.repository'; import { RoleRepository } from '../repositories/role.repository';
import { UserRepository } from '../repositories/user.repository'; import { UserRepository } from '../repositories/user.repository';
import { PermissionModel } from '../schemas/permission.schema'; import { PermissionModel } from '../schemas/permission.schema';
import { RoleModel, Role } from '../schemas/role.schema'; import { Role, RoleModel } from '../schemas/role.schema';
import { UserModel, User } from '../schemas/user.schema'; import { User, UserModel } from '../schemas/user.schema';
describe('RoleRepository', () => { describe('RoleRepository', () => {
let roleRepository: RoleRepository; let roleRepository: RoleRepository;
@ -34,6 +34,7 @@ describe('RoleRepository', () => {
let roleModel: Model<Role>; let roleModel: Model<Role>;
let role: Role; let role: Role;
let users: User[]; let users: User[];
let roleToDelete: Role;
beforeAll(async () => { beforeAll(async () => {
const module: TestingModule = await Test.createTestingModule({ const module: TestingModule = await Test.createTestingModule({
@ -57,6 +58,9 @@ describe('RoleRepository', () => {
users = (await userRepository.findAll()).filter((user) => users = (await userRepository.findAll()).filter((user) =>
user.roles.includes(role.id), user.roles.includes(role.id),
); );
roleToDelete = await roleRepository.findOne({
name: 'manager',
});
}); });
afterAll(async () => { afterAll(async () => {
@ -106,4 +110,31 @@ describe('RoleRepository', () => {
expect(result).toEqualPayload(rolesWithPermissionsAndUsers); 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,
});
});
});
}); });

View File

@ -96,7 +96,7 @@ export class RoleRepository extends BaseRepository<
* *
* @returns The result of the delete operation. * @returns The result of the delete operation.
*/ */
async deleteOneQuery(id: string) { async deleteOne(id: string) {
const result = await this.model.deleteOne({ _id: id }).exec(); const result = await this.model.deleteOne({ _id: id }).exec();
if (result.deletedCount > 0) { if (result.deletedCount > 0) {
await this.permissionModel.deleteMany({ role: id }); await this.permissionModel.deleteMany({ role: id });