95 lines
2.6 KiB
TypeScript
95 lines
2.6 KiB
TypeScript
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 }),
|
|
}));
|
|
});
|
|
});
|