41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { RbacService } from './rbac.service';
|
|
|
|
describe('RbacService teacher listing', () => {
|
|
it('queries only teacher roles, excluding administrators', async () => {
|
|
const queryBuilder = {
|
|
leftJoinAndSelect: jest.fn(),
|
|
where: jest.fn(),
|
|
andWhere: jest.fn(),
|
|
getCount: jest.fn().mockResolvedValue(0),
|
|
orderBy: jest.fn(),
|
|
skip: jest.fn(),
|
|
take: jest.fn(),
|
|
getMany: jest.fn().mockResolvedValue([]),
|
|
};
|
|
for (const method of ['leftJoinAndSelect', 'where', 'andWhere', 'orderBy', 'skip', 'take'] as const) {
|
|
queryBuilder[method].mockReturnValue(queryBuilder);
|
|
}
|
|
const userRepo = { createQueryBuilder: jest.fn().mockReturnValue(queryBuilder) };
|
|
const service = new RbacService(
|
|
{} as never,
|
|
{} as never,
|
|
userRepo as never,
|
|
{} as never,
|
|
{} as never,
|
|
{} as never,
|
|
{} as never,
|
|
{} as never,
|
|
);
|
|
|
|
await service.getTeachers();
|
|
|
|
expect(queryBuilder.where).toHaveBeenCalledWith(
|
|
'(role.code IN (:...roleCodes) OR role.name IN (:...roleNames))',
|
|
{
|
|
roleCodes: ['teacher'],
|
|
roleNames: ['任课老师', '老师'],
|
|
},
|
|
);
|
|
});
|
|
});
|