feat(v2.4): 完成领域主写迁移
This commit is contained in:
94
apps/server/src/modules/member/member.service.spec.ts
Normal file
94
apps/server/src/modules/member/member.service.spec.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
import { MemberService } from './member.service';
|
||||
|
||||
describe('MemberService domain writes', () => {
|
||||
const makeService = () => {
|
||||
const prisma = {
|
||||
user: {
|
||||
create: jest.fn(),
|
||||
delete: jest.fn(),
|
||||
findMany: jest.fn(),
|
||||
update: jest.fn(),
|
||||
},
|
||||
};
|
||||
return { prisma, service: new MemberService(prisma as any) };
|
||||
};
|
||||
|
||||
it('creates members with UI role and department fields in users', async () => {
|
||||
const { prisma, service } = makeService();
|
||||
prisma.user.create.mockResolvedValue({
|
||||
id: 'member-1',
|
||||
name: '张三',
|
||||
username: 'zhangsan',
|
||||
departmentId: 'dept-2',
|
||||
roleId: 'role-dev',
|
||||
phone: '13000000000',
|
||||
email: 'zhangsan@example.com',
|
||||
password: 'Ftb12345',
|
||||
isSystem: false,
|
||||
createdAt: new Date('2026-07-08T00:00:00.000Z'),
|
||||
});
|
||||
|
||||
await service.create({
|
||||
name: '张三',
|
||||
username: 'zhangsan',
|
||||
departmentId: 'dept-2',
|
||||
roleId: 'role-dev',
|
||||
phone: '13000000000',
|
||||
email: 'zhangsan@example.com',
|
||||
password: 'Ftb12345',
|
||||
});
|
||||
|
||||
expect(prisma.user.create).toHaveBeenCalledWith({
|
||||
data: expect.objectContaining({
|
||||
name: '张三',
|
||||
username: 'zhangsan',
|
||||
departmentId: 'dept-2',
|
||||
roleId: 'role-dev',
|
||||
phone: '13000000000',
|
||||
email: 'zhangsan@example.com',
|
||||
password: 'Ftb12345',
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
it('protects the built-in admin from deletion and privileged field edits', async () => {
|
||||
const { prisma, service } = makeService();
|
||||
prisma.user.update.mockResolvedValue({
|
||||
id: 'm-8',
|
||||
name: '超级管理员',
|
||||
username: 'admin',
|
||||
roleId: 'role-admin',
|
||||
departmentId: '',
|
||||
phone: '13200132009',
|
||||
email: 'admin@example.com',
|
||||
password: 'Ftb12345',
|
||||
isSystem: true,
|
||||
createdAt: new Date('2026-07-08T00:00:00.000Z'),
|
||||
});
|
||||
|
||||
await expect(service.remove('m-8')).rejects.toBeInstanceOf(BadRequestException);
|
||||
|
||||
await service.update('m-8', {
|
||||
name: '误改',
|
||||
username: 'other',
|
||||
roleId: 'role-viewer',
|
||||
departmentId: 'dept-1',
|
||||
phone: '13200132009',
|
||||
});
|
||||
|
||||
expect(prisma.user.delete).not.toHaveBeenCalled();
|
||||
expect(prisma.user.update).toHaveBeenCalledWith({
|
||||
where: { id: 'm-8' },
|
||||
data: expect.not.objectContaining({
|
||||
name: '误改',
|
||||
username: 'other',
|
||||
roleId: 'role-viewer',
|
||||
departmentId: 'dept-1',
|
||||
}),
|
||||
});
|
||||
expect(prisma.user.update).toHaveBeenCalledWith(expect.objectContaining({
|
||||
data: expect.objectContaining({ phone: '13200132009', isSystem: true }),
|
||||
}));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user