|
|
@@ -1,7 +1,7 @@
|
|
|
import { describe, it, expect, beforeAll, beforeEach, afterEach } from 'vitest';
|
|
|
import { DataSource } from 'typeorm';
|
|
|
-import { RoleService } from '../../src/services/role.service';
|
|
|
-import { Role } from '../../src/entities/role.entity';
|
|
|
+import { RoleServiceMt } from '../../src/services/role.service.mt';
|
|
|
+import { RoleMt } from '../../src/entities/role.entity';
|
|
|
import { AppDataSource, initializeDataSource } from '@d8d/shared-utils';
|
|
|
|
|
|
// 确保测试环境变量被设置
|
|
|
@@ -9,11 +9,11 @@ process.env.NODE_ENV = 'test';
|
|
|
|
|
|
describe('Role Integration Tests', () => {
|
|
|
let dataSource: DataSource;
|
|
|
- let roleService: RoleService;
|
|
|
+ let roleService: RoleServiceMt;
|
|
|
|
|
|
beforeAll(() => {
|
|
|
// 使用预先配置的数据源
|
|
|
- initializeDataSource([Role])
|
|
|
+ initializeDataSource([RoleMt])
|
|
|
dataSource = AppDataSource;
|
|
|
})
|
|
|
|
|
|
@@ -21,7 +21,7 @@ describe('Role Integration Tests', () => {
|
|
|
if (!dataSource.isInitialized) {
|
|
|
await dataSource.initialize();
|
|
|
}
|
|
|
- roleService = new RoleService(dataSource);
|
|
|
+ roleService = new RoleServiceMt(dataSource);
|
|
|
});
|
|
|
|
|
|
afterEach(async () => {
|
|
|
@@ -36,7 +36,8 @@ describe('Role Integration Tests', () => {
|
|
|
const roleData = {
|
|
|
name: 'admin',
|
|
|
description: 'Administrator role',
|
|
|
- permissions: ['user:create', 'user:delete', 'role:manage']
|
|
|
+ permissions: ['user:create', 'user:delete', 'role:manage'],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
const createdRole = await roleService.create(roleData);
|
|
|
@@ -57,7 +58,8 @@ describe('Role Integration Tests', () => {
|
|
|
const roleData = {
|
|
|
name: 'updaterole',
|
|
|
description: 'Role to be updated',
|
|
|
- permissions: ['user:read']
|
|
|
+ permissions: ['user:read'],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
const createdRole = await roleService.create(roleData);
|
|
|
@@ -80,7 +82,8 @@ describe('Role Integration Tests', () => {
|
|
|
const roleData = {
|
|
|
name: 'deleterole',
|
|
|
description: 'Role to be deleted',
|
|
|
- permissions: ['user:read']
|
|
|
+ permissions: ['user:read'],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
const createdRole = await roleService.create(roleData);
|
|
|
@@ -98,7 +101,8 @@ describe('Role Integration Tests', () => {
|
|
|
const roleData = {
|
|
|
name: 'specificrole',
|
|
|
description: 'Specific role for testing',
|
|
|
- permissions: ['user:read']
|
|
|
+ permissions: ['user:read'],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
await roleService.create(roleData);
|
|
|
@@ -113,9 +117,9 @@ describe('Role Integration Tests', () => {
|
|
|
it('should get paginated list of roles', async () => {
|
|
|
// Create multiple roles
|
|
|
const rolesData = [
|
|
|
- { name: 'role1', description: 'Role 1', permissions: ['user:read'] },
|
|
|
- { name: 'role2', description: 'Role 2', permissions: ['user:read'] },
|
|
|
- { name: 'role3', description: 'Role 3', permissions: ['user:read'] }
|
|
|
+ { name: 'role1', description: 'Role 1', permissions: ['user:read'], tenantId: 1 },
|
|
|
+ { name: 'role2', description: 'Role 2', permissions: ['user:read'], tenantId: 1 },
|
|
|
+ { name: 'role3', description: 'Role 3', permissions: ['user:read'], tenantId: 1 }
|
|
|
];
|
|
|
|
|
|
for (const roleData of rolesData) {
|
|
|
@@ -133,9 +137,9 @@ describe('Role Integration Tests', () => {
|
|
|
|
|
|
it('should search roles by name', async () => {
|
|
|
// Create roles with different names
|
|
|
- await roleService.create({ name: 'admin', description: 'Admin role', permissions: ['user:create'] });
|
|
|
- await roleService.create({ name: 'user', description: 'User role', permissions: ['user:read'] });
|
|
|
- await roleService.create({ name: 'moderator', description: 'Moderator role', permissions: ['user:update'] });
|
|
|
+ await roleService.create({ name: 'admin', description: 'Admin role', permissions: ['user:create'], tenantId: 1 });
|
|
|
+ await roleService.create({ name: 'user', description: 'User role', permissions: ['user:read'], tenantId: 1 });
|
|
|
+ await roleService.create({ name: 'moderator', description: 'Moderator role', permissions: ['user:update'], tenantId: 1 });
|
|
|
|
|
|
const [adminRoles] = await roleService.getList(1, 10, 'admin', ['name']);
|
|
|
expect(adminRoles).toHaveLength(1);
|
|
|
@@ -152,7 +156,8 @@ describe('Role Integration Tests', () => {
|
|
|
const roleData = {
|
|
|
name: 'permissionrole',
|
|
|
description: 'Role with specific permissions',
|
|
|
- permissions: ['user:create', 'user:read', 'user:update']
|
|
|
+ permissions: ['user:create', 'user:read', 'user:update'],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
const role = await roleService.create(roleData);
|
|
|
@@ -173,25 +178,38 @@ describe('Role Integration Tests', () => {
|
|
|
});
|
|
|
|
|
|
describe('Role Validation', () => {
|
|
|
- it('should require unique role names', async () => {
|
|
|
- const roleData = {
|
|
|
- name: 'unique',
|
|
|
- description: 'Unique role',
|
|
|
- permissions: ['user:read']
|
|
|
+ it('should allow same role names in different tenants', async () => {
|
|
|
+ const roleData1 = {
|
|
|
+ name: 'same_name',
|
|
|
+ description: 'Role in tenant 1',
|
|
|
+ permissions: ['user:read'],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
- // Create first role
|
|
|
- await roleService.create(roleData);
|
|
|
+ const roleData2 = {
|
|
|
+ name: 'same_name',
|
|
|
+ description: 'Role in tenant 2',
|
|
|
+ permissions: ['user:read'],
|
|
|
+ tenantId: 2
|
|
|
+ };
|
|
|
+
|
|
|
+ // Create role in tenant 1
|
|
|
+ const role1 = await roleService.create(roleData1);
|
|
|
+ expect(role1).toBeDefined();
|
|
|
+ expect(role1.tenantId).toBe(1);
|
|
|
|
|
|
- // Try to create role with same name
|
|
|
- await expect(roleService.create(roleData)).rejects.toThrow();
|
|
|
+ // Create role with same name in tenant 2 (should work in multi-tenant)
|
|
|
+ const role2 = await roleService.create(roleData2);
|
|
|
+ expect(role2).toBeDefined();
|
|
|
+ expect(role2.tenantId).toBe(2);
|
|
|
});
|
|
|
|
|
|
it('should require at least one permission', async () => {
|
|
|
const roleData = {
|
|
|
name: 'nopermission',
|
|
|
description: 'Role without permissions',
|
|
|
- permissions: []
|
|
|
+ permissions: [],
|
|
|
+ tenantId: 1
|
|
|
};
|
|
|
|
|
|
// This should work as TypeORM handles empty arrays
|