(options?: {
onStatus?: (status: Task['status']) => void;
onList?: () => void;
})
| 50 | } |
| 51 | |
| 52 | function createMockTaskStore(options?: { |
| 53 | onStatus?: (status: Task['status']) => void; |
| 54 | onList?: () => void; |
| 55 | }): TaskStore & { [K in keyof TaskStore]: MockInstance } { |
| 56 | const tasks: Record<string, Task & { result?: Result }> = {}; |
| 57 | return { |
| 58 | createTask: vi.fn((taskParams: TaskCreationParams, _1: RequestId, _2: Request) => { |
| 59 | // Generate a unique task ID |
| 60 | const taskId = `test-task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; |
| 61 | const createdAt = new Date().toISOString(); |
| 62 | const task = (tasks[taskId] = { |
| 63 | taskId, |
| 64 | status: 'working', |
| 65 | ttl: taskParams.ttl ?? null, |
| 66 | createdAt, |
| 67 | lastUpdatedAt: createdAt, |
| 68 | pollInterval: taskParams.pollInterval ?? 1000 |
| 69 | }); |
| 70 | options?.onStatus?.('working'); |
| 71 | return Promise.resolve(task); |
| 72 | }), |
| 73 | getTask: vi.fn((taskId: string) => { |
| 74 | return Promise.resolve(tasks[taskId] ?? null); |
| 75 | }), |
| 76 | updateTaskStatus: vi.fn((taskId, status, statusMessage) => { |
| 77 | const task = tasks[taskId]; |
| 78 | if (task) { |
| 79 | task.status = status; |
| 80 | task.statusMessage = statusMessage; |
| 81 | options?.onStatus?.(task.status); |
| 82 | } |
| 83 | return Promise.resolve(); |
| 84 | }), |
| 85 | storeTaskResult: vi.fn((taskId: string, status: 'completed' | 'failed', result: Result) => { |
| 86 | const task = tasks[taskId]; |
| 87 | if (task) { |
| 88 | task.status = status; |
| 89 | task.result = result; |
| 90 | options?.onStatus?.(status); |
| 91 | } |
| 92 | return Promise.resolve(); |
| 93 | }), |
| 94 | getTaskResult: vi.fn((taskId: string) => { |
| 95 | const task = tasks[taskId]; |
| 96 | if (task?.result) { |
| 97 | return Promise.resolve(task.result); |
| 98 | } |
| 99 | throw new Error('Task result not found'); |
| 100 | }), |
| 101 | listTasks: vi.fn(() => { |
| 102 | const result = { |
| 103 | tasks: Object.values(tasks) |
| 104 | }; |
| 105 | options?.onList?.(); |
| 106 | return Promise.resolve(result); |
| 107 | }) |
| 108 | }; |
| 109 | } |
no test coverage detected
searching dependent graphs…