role.service.test.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { describe, it, expect, beforeEach, vi } from 'vitest';
  2. import { RoleService } from '../../src/services/role.service';
  3. import { Role } from '../../src/entities/role.entity';
  4. import { DataSource, Repository } from 'typeorm';
  5. // Mock DataSource
  6. const mockDataSource = {
  7. getRepository: vi.fn()
  8. } as unknown as DataSource;
  9. // Mock repository
  10. const mockRepository = {
  11. findOneBy: vi.fn(),
  12. findOne: vi.fn()
  13. } as unknown as Repository<Role>;
  14. describe('RoleService', () => {
  15. let roleService: RoleService;
  16. beforeEach(() => {
  17. vi.clearAllMocks();
  18. // Setup mock repository
  19. vi.mocked(mockDataSource.getRepository).mockReturnValue(mockRepository);
  20. roleService = new RoleService(mockDataSource);
  21. });
  22. describe('getRoleByName', () => {
  23. it('should return role by name', async () => {
  24. const mockRole = {
  25. id: 1,
  26. name: 'admin',
  27. description: 'Administrator role',
  28. permissions: ['user:create', 'user:delete']
  29. } as Role;
  30. vi.mocked(mockRepository.findOneBy).mockResolvedValue(mockRole);
  31. const result = await roleService.getRoleByName('admin');
  32. expect(mockRepository.findOneBy).toHaveBeenCalledWith({ name: 'admin' });
  33. expect(result).toEqual(mockRole);
  34. });
  35. it('should return null when role not found', async () => {
  36. vi.mocked(mockRepository.findOneBy).mockResolvedValue(null);
  37. const result = await roleService.getRoleByName('nonexistent');
  38. expect(result).toBeNull();
  39. });
  40. });
  41. describe('checkPermission', () => {
  42. it('should return true when role has permission', async () => {
  43. const mockRole = {
  44. id: 1,
  45. name: 'admin',
  46. permissions: ['user:create', 'user:delete']
  47. } as Role;
  48. vi.mocked(mockRepository.findOne).mockResolvedValue(mockRole);
  49. const result = await roleService.checkPermission(1, 'user:create');
  50. expect(result).toBe(true);
  51. });
  52. it('should return false when role does not have permission', async () => {
  53. const mockRole = {
  54. id: 1,
  55. name: 'admin',
  56. permissions: ['user:create', 'user:delete']
  57. } as Role;
  58. vi.mocked(mockRepository.findOne).mockResolvedValue(mockRole);
  59. const result = await roleService.checkPermission(1, 'user:update');
  60. expect(result).toBe(false);
  61. });
  62. it('should return false when role not found', async () => {
  63. vi.mocked(mockRepository.findOne).mockResolvedValue(null);
  64. const result = await roleService.checkPermission(999, 'user:create');
  65. expect(result).toBe(false);
  66. });
  67. });
  68. // Test inherited methods from GenericCrudService
  69. describe('inherited methods', () => {
  70. it('should have getById method', () => {
  71. expect(roleService.getById).toBeDefined();
  72. });
  73. it('should have getList method', () => {
  74. expect(roleService.getList).toBeDefined();
  75. });
  76. it('should have create method', () => {
  77. expect(roleService.create).toBeDefined();
  78. });
  79. it('should have update method', () => {
  80. expect(roleService.update).toBeDefined();
  81. });
  82. it('should have delete method', () => {
  83. expect(roleService.delete).toBeDefined();
  84. });
  85. });
  86. });