import { buildLatestAgentReplacementTaskMap, getAgentReplacementTaskResultImageUrl, isAgentReplacementTaskInPendingRun, resolveAgentReplacementCardStatus, type AgentReplacementTaskSnapshot, } from "@/lib/agents/replacement-task-status"; function expect(condition: boolean, message: string) { if (!condition) { throw new Error(message); } } function createTask( overrides: Partial ): AgentReplacementTaskSnapshot { return { id: "task-1", modeType: "detail_replacement", referenceId: "detail-1", messageId: "request-1", status: "pending", error: null, result: null, createdAt: "2026-08-01T08:00:00.000Z", startedAt: null, completedAt: null, queueStatus: null, ...overrides, }; } const pendingTask = createTask({ status: "pending" }); const runningTask = createTask({ status: "running" }); const failedTask = createTask({ status: "failed", error: "provider timeout" }); expect( resolveAgentReplacementCardStatus({ resultUrl: null, taskStatus: pendingTask.status, isRequestedInPendingRun: true, isGenerating: true, index: 0, generatedCount: 0, }) === "queued", "a database pending task must display as queued" ); expect( resolveAgentReplacementCardStatus({ resultUrl: null, taskStatus: runningTask.status, isRequestedInPendingRun: true, isGenerating: true, index: 0, generatedCount: 0, }) === "generating", "a database running task must display as generating" ); expect( resolveAgentReplacementCardStatus({ resultUrl: null, taskStatus: failedTask.status, isRequestedInPendingRun: false, isGenerating: false, index: 0, generatedCount: 0, }) === "failed", "a failed database task must display as failed" ); expect( resolveAgentReplacementCardStatus({ resultUrl: "https://cdn.example.com/previous-result.png", taskStatus: failedTask.status, isRequestedInPendingRun: false, isGenerating: false, index: 0, generatedCount: 0, }) === "failed", "a failed rerun must retain the prior image while displaying the failed status" ); expect( resolveAgentReplacementCardStatus({ resultUrl: null, taskStatus: null, isRequestedInPendingRun: true, isGenerating: true, index: 0, generatedCount: 0, }) === "queued", "a submitted card must display as queued before its database task is visible" ); const newerTask = createTask({ id: "task-2", status: "succeeded", createdAt: "2026-08-01T08:05:00.000Z", completedAt: "2026-08-01T08:06:00.000Z", result: { images: [ { originalUrl: "https://cdn.example.com/detail-result.png", thumbnailUrl: "https://cdn.example.com/detail-result-thumb.png", }, ], }, }); const latestTaskMap = buildLatestAgentReplacementTaskMap({ tasks: [pendingTask, newerTask], modeType: "detail_replacement", }); expect( latestTaskMap.get("detail-1")?.id === newerTask.id, "the latest task for each detail card must win" ); expect( getAgentReplacementTaskResultImageUrl(newerTask.result) === "https://cdn.example.com/detail-result.png", "a succeeded task must expose its original result image" ); expect( !isAgentReplacementTaskInPendingRun({ task: pendingTask, pendingStartedAt: Date.parse("2026-08-01T08:02:00.000Z"), requestMessageId: "request-2", }), "an old task must not control a newly submitted detail replacement run" ); expect( isAgentReplacementTaskInPendingRun({ task: newerTask, pendingStartedAt: Date.parse("2026-08-01T08:04:59.000Z"), requestMessageId: "request-1", }), "the task created for the current run must control its detail card" ); console.log("agent replacement task status tests passed");