66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { BadRequestException } from '@nestjs/common';
|
|
import { SyncController } from './sync.controller';
|
|
import { ScheduleSyncQueryDto } from './dto/schedule-sync.dto';
|
|
|
|
describe('SyncController — schedule sync options', () => {
|
|
it('forwards the attendance-machine-only option', async () => {
|
|
const syncService = {
|
|
syncScheduleToDingTalk: jest.fn().mockResolvedValue({ syncedItems: 0 }),
|
|
};
|
|
const controller = new SyncController(syncService as never);
|
|
|
|
await controller.syncSchedule(Object.assign(new ScheduleSyncQueryDto(), {
|
|
dateFrom: '2026-07-10',
|
|
days: 30,
|
|
attendanceMachineOnly: true,
|
|
}));
|
|
|
|
expect(syncService.syncScheduleToDingTalk).toHaveBeenCalledWith(
|
|
'2026-07-10',
|
|
30,
|
|
true,
|
|
);
|
|
});
|
|
|
|
it.each(['1abc', '0', '-1', '9007199254740992'])(
|
|
'rejects invalid root department id %s',
|
|
async (rootDeptId) => {
|
|
const syncService = { triggerSync: jest.fn() };
|
|
const controller = new SyncController(syncService as never);
|
|
|
|
await expect(controller.triggerSync('dingtalk_students', rootDeptId)).rejects.toBeInstanceOf(
|
|
BadRequestException,
|
|
);
|
|
expect(syncService.triggerSync).not.toHaveBeenCalled();
|
|
},
|
|
);
|
|
|
|
it('accepts a positive integer root department id', async () => {
|
|
const syncService = { triggerSync: jest.fn().mockResolvedValue([]) };
|
|
const controller = new SyncController(syncService as never);
|
|
|
|
await controller.triggerSync('dingtalk_students', '12');
|
|
|
|
expect(syncService.triggerSync).toHaveBeenCalledWith('dingtalk_students', 12);
|
|
});
|
|
|
|
it('returns Jinshuju form fields for the selector', async () => {
|
|
const syncService = {
|
|
getJinshujuFormFields: jest.fn().mockResolvedValue({
|
|
name: '报名表',
|
|
fields: [{ key: 'field_1', label: '姓名', type: 'single_line_text' }],
|
|
}),
|
|
};
|
|
const controller = new SyncController(syncService as never);
|
|
|
|
const result = await controller.getJinshujuFields({
|
|
apiKey: 'key',
|
|
apiSecret: 'secret',
|
|
formToken: 'form-a',
|
|
});
|
|
|
|
expect(syncService.getJinshujuFormFields).toHaveBeenCalledWith('key', 'secret', 'form-a');
|
|
expect(result.data.fields[0]).toMatchObject({ key: 'field_1', label: '姓名' });
|
|
});
|
|
});
|