- HERENCIA-SIMCO.md actualizado con directivas v3.7 y v3.8 - Actualizaciones de configuracion Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
195 lines
9.0 KiB
JavaScript
195 lines
9.0 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const testing_1 = require("@nestjs/testing");
|
|
const core_1 = require("@nestjs/core");
|
|
const rbac_controller_1 = require("../rbac.controller");
|
|
const rbac_service_1 = require("../services/rbac.service");
|
|
describe('RbacController', () => {
|
|
let controller;
|
|
let service;
|
|
const mockRequestUser = {
|
|
id: 'user-123',
|
|
sub: 'user-123',
|
|
tenant_id: 'tenant-123',
|
|
email: 'test@example.com',
|
|
role: 'admin',
|
|
};
|
|
const mockRole = {
|
|
id: 'role-123',
|
|
tenant_id: 'tenant-123',
|
|
name: 'Admin',
|
|
description: 'Administrator role',
|
|
is_system: false,
|
|
created_at: new Date('2026-01-01'),
|
|
};
|
|
const mockPermission = {
|
|
id: 'perm-123',
|
|
key: 'users:read',
|
|
name: 'Read Users',
|
|
description: 'Can read users',
|
|
category: 'users',
|
|
};
|
|
const mockUserRole = {
|
|
id: 'ur-123',
|
|
user_id: 'user-123',
|
|
role_id: 'role-123',
|
|
tenant_id: 'tenant-123',
|
|
role: mockRole,
|
|
};
|
|
beforeEach(async () => {
|
|
const module = await testing_1.Test.createTestingModule({
|
|
controllers: [rbac_controller_1.RbacController],
|
|
providers: [
|
|
{
|
|
provide: rbac_service_1.RbacService,
|
|
useValue: {
|
|
findAllRoles: jest.fn(),
|
|
getRoleWithPermissions: jest.fn(),
|
|
createRole: jest.fn(),
|
|
updateRole: jest.fn(),
|
|
deleteRole: jest.fn(),
|
|
findAllPermissions: jest.fn(),
|
|
findPermissionsByCategory: jest.fn(),
|
|
getUserRoles: jest.fn(),
|
|
getUserPermissions: jest.fn(),
|
|
assignRoleToUser: jest.fn(),
|
|
removeRoleFromUser: jest.fn(),
|
|
userHasPermission: jest.fn().mockResolvedValue(true),
|
|
userHasAnyPermission: jest.fn().mockResolvedValue(true),
|
|
},
|
|
},
|
|
core_1.Reflector,
|
|
],
|
|
}).compile();
|
|
controller = module.get(rbac_controller_1.RbacController);
|
|
service = module.get(rbac_service_1.RbacService);
|
|
});
|
|
afterEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
describe('findAllRoles', () => {
|
|
it('should return all roles for tenant', async () => {
|
|
service.findAllRoles.mockResolvedValue([mockRole]);
|
|
const result = await controller.findAllRoles(mockRequestUser);
|
|
expect(result).toEqual([mockRole]);
|
|
expect(service.findAllRoles).toHaveBeenCalledWith('tenant-123');
|
|
});
|
|
});
|
|
describe('findRoleById', () => {
|
|
it('should return role with permissions', async () => {
|
|
const roleWithPerms = { ...mockRole, permissions: [mockPermission] };
|
|
service.getRoleWithPermissions.mockResolvedValue(roleWithPerms);
|
|
const result = await controller.findRoleById('role-123', mockRequestUser);
|
|
expect(result).toEqual(roleWithPerms);
|
|
expect(service.getRoleWithPermissions).toHaveBeenCalledWith('role-123', 'tenant-123');
|
|
});
|
|
});
|
|
describe('createRole', () => {
|
|
it('should create a role', async () => {
|
|
const dto = { name: 'New Role', description: 'A new role' };
|
|
service.createRole.mockResolvedValue(mockRole);
|
|
const result = await controller.createRole(dto, mockRequestUser);
|
|
expect(result).toEqual(mockRole);
|
|
expect(service.createRole).toHaveBeenCalledWith(dto, 'tenant-123');
|
|
});
|
|
});
|
|
describe('updateRole', () => {
|
|
it('should update a role', async () => {
|
|
const dto = { name: 'Updated Role' };
|
|
const updated = { ...mockRole, name: 'Updated Role' };
|
|
service.updateRole.mockResolvedValue(updated);
|
|
const result = await controller.updateRole('role-123', dto, mockRequestUser);
|
|
expect(result.name).toBe('Updated Role');
|
|
expect(service.updateRole).toHaveBeenCalledWith('role-123', dto, 'tenant-123');
|
|
});
|
|
});
|
|
describe('deleteRole', () => {
|
|
it('should delete a role', async () => {
|
|
service.deleteRole.mockResolvedValue(undefined);
|
|
const result = await controller.deleteRole('role-123', mockRequestUser);
|
|
expect(result.message).toBe('Role eliminado correctamente');
|
|
expect(service.deleteRole).toHaveBeenCalledWith('role-123', 'tenant-123');
|
|
});
|
|
});
|
|
describe('findAllPermissions', () => {
|
|
it('should return all permissions', async () => {
|
|
service.findAllPermissions.mockResolvedValue([mockPermission]);
|
|
const result = await controller.findAllPermissions();
|
|
expect(result).toEqual([mockPermission]);
|
|
expect(service.findAllPermissions).toHaveBeenCalled();
|
|
});
|
|
});
|
|
describe('findPermissionsByCategory', () => {
|
|
it('should return permissions by category', async () => {
|
|
service.findPermissionsByCategory.mockResolvedValue([mockPermission]);
|
|
const result = await controller.findPermissionsByCategory('users');
|
|
expect(result).toEqual([mockPermission]);
|
|
expect(service.findPermissionsByCategory).toHaveBeenCalledWith('users');
|
|
});
|
|
});
|
|
describe('getUserRoles', () => {
|
|
it('should return user roles', async () => {
|
|
service.getUserRoles.mockResolvedValue([mockUserRole]);
|
|
const result = await controller.getUserRoles('user-456', mockRequestUser);
|
|
expect(result).toEqual([mockUserRole]);
|
|
expect(service.getUserRoles).toHaveBeenCalledWith('user-456', 'tenant-123');
|
|
});
|
|
});
|
|
describe('getUserPermissions', () => {
|
|
it('should return user permissions', async () => {
|
|
const permissions = [mockPermission, { ...mockPermission, id: 'perm-456', key: 'users:write' }];
|
|
service.getUserPermissions.mockResolvedValue(permissions);
|
|
const result = await controller.getUserPermissions('user-456', mockRequestUser);
|
|
expect(result).toEqual(permissions);
|
|
expect(service.getUserPermissions).toHaveBeenCalledWith('user-456', 'tenant-123');
|
|
});
|
|
});
|
|
describe('assignRoleToUser', () => {
|
|
it('should assign role to user', async () => {
|
|
const dto = { user_id: 'user-456', role_id: 'role-123' };
|
|
service.assignRoleToUser.mockResolvedValue(mockUserRole);
|
|
const result = await controller.assignRoleToUser(dto, mockRequestUser);
|
|
expect(result).toEqual(mockUserRole);
|
|
expect(service.assignRoleToUser).toHaveBeenCalledWith(dto, 'tenant-123', 'user-123');
|
|
});
|
|
});
|
|
describe('removeRoleFromUser', () => {
|
|
it('should remove role from user', async () => {
|
|
service.removeRoleFromUser.mockResolvedValue(undefined);
|
|
const result = await controller.removeRoleFromUser('user-456', 'role-123', mockRequestUser);
|
|
expect(result.message).toBe('Role removido correctamente');
|
|
expect(service.removeRoleFromUser).toHaveBeenCalledWith('user-456', 'role-123', 'tenant-123');
|
|
});
|
|
});
|
|
describe('checkPermission', () => {
|
|
it('should return true when user has permission', async () => {
|
|
service.userHasPermission.mockResolvedValue(true);
|
|
const result = await controller.checkPermission('users:read', mockRequestUser);
|
|
expect(result).toEqual({ hasPermission: true });
|
|
expect(service.userHasPermission).toHaveBeenCalledWith('user-123', 'tenant-123', 'users:read');
|
|
});
|
|
it('should return false when user lacks permission', async () => {
|
|
service.userHasPermission.mockResolvedValue(false);
|
|
const result = await controller.checkPermission('admin:delete', mockRequestUser);
|
|
expect(result).toEqual({ hasPermission: false });
|
|
});
|
|
});
|
|
describe('getMyRoles', () => {
|
|
it('should return current user roles', async () => {
|
|
service.getUserRoles.mockResolvedValue([mockUserRole]);
|
|
const result = await controller.getMyRoles(mockRequestUser);
|
|
expect(result).toEqual([mockUserRole]);
|
|
expect(service.getUserRoles).toHaveBeenCalledWith('user-123', 'tenant-123');
|
|
});
|
|
});
|
|
describe('getMyPermissions', () => {
|
|
it('should return current user permissions', async () => {
|
|
const permissions = [mockPermission, { ...mockPermission, id: 'perm-456', key: 'roles:read' }];
|
|
service.getUserPermissions.mockResolvedValue(permissions);
|
|
const result = await controller.getMyPermissions(mockRequestUser);
|
|
expect(result).toEqual(permissions);
|
|
expect(service.getUserPermissions).toHaveBeenCalledWith('user-123', 'tenant-123');
|
|
});
|
|
});
|
|
});
|
|
//# sourceMappingURL=rbac.controller.spec.js.map
|