moving
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled

This commit is contained in:
Oleg Maslov
2026-09-02 10:10:29 +02:00
commit 0c3e2ead3b
3841 changed files with 970576 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
import { describe, expect, it, vi } from 'vitest';
import type { Job } from 'bullmq';
import type { Db } from '../../../server/src/db/connection.js';
import type { JobData } from '../../src/job-processor.js';
import { createCronHandler } from '../../src/handlers/cron-handler.js';
function makeJob(input: Record<string, unknown>): Job<JobData> {
return {
data: {
jobId: 'cron-job-1',
teamId: 'team-1',
userId: 'user-1',
jobType: 'cron',
input,
},
} as unknown as Job<JobData>;
}
describe('Cron handler', () => {
const db = {} as Db;
it('delegates a scheduled job to a real worker handler', async () => {
const dispatch = vi.fn(async (job: Job<JobData>) => ({
response: `ran ${job.data.jobType}`,
input: job.data.input,
}));
const handler = createCronHandler(dispatch);
const result = await handler(makeJob({
jobType: 'chat',
jobConfig: { message: 'send the daily brief' },
}), db);
expect(dispatch).toHaveBeenCalledOnce();
const delegatedJob = dispatch.mock.calls[0][0];
expect(delegatedJob.data.jobType).toBe('chat');
expect(delegatedJob.data.input).toEqual({ message: 'send the daily brief' });
expect(result).toEqual({
response: 'ran chat',
input: { message: 'send the daily brief' },
cron: { delegatedJobType: 'chat' },
});
});
it('accepts input as the delegated payload for queue clients', async () => {
const dispatch = vi.fn(async () => ({ ok: true }));
const handler = createCronHandler(dispatch);
await handler(makeJob({
jobType: 'task',
input: { taskId: 'task-1' },
}), db);
expect(dispatch.mock.calls[0][0].data.input).toEqual({ taskId: 'task-1' });
});
it('rejects missing, unsupported, and malformed delegation targets', async () => {
const handler = createCronHandler(vi.fn(async () => ({ ok: true })));
await expect(handler(makeJob({}), db)).rejects.toThrow('requires input.jobType');
await expect(handler(makeJob({ jobType: 'cron', jobConfig: {} }), db))
.rejects.toThrow('cannot delegate to "cron"');
await expect(handler(makeJob({ jobType: 'chat' }), db))
.rejects.toThrow('requires input.jobConfig or input.input');
});
});