import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it, vi } from "vite-plus/test"; const state = vi.hoisted(() => ({ projection: null as unknown, workflow: null as unknown, })); vi.mock("@t3tools/client-runtime/environment", () => ({ scopeThreadRef: () => ({}) as never, })); vi.mock("@t3tools/client-runtime/state/thread-workflows", () => ({ deriveThreadQueueWorkflowState: () => state.workflow, })); vi.mock("../../state/entities", () => ({ useThreadProjection: () => state.projection, })); vi.mock("../../state/threads", () => ({ threadEnvironment: { cancelQueuedRun: Symbol("cancelQueuedRun"), promoteQueuedRun: Symbol("promoteQueuedRun"), reorderQueuedRun: Symbol("reorderQueuedRun"), }, })); vi.mock("../../state/use-atom-command", () => ({ useAtomCommand: () => async () => undefined, })); vi.mock("../../assets/assetUrls", () => ({ useAssetUrls: (_environmentId: never, resources: ReadonlyArray<{ attachmentId: string }>) => resources.map((resource) => `https://assets.test/${resource.attachmentId}`), })); import { QueuedRunsControl } from "./QueuedRunsControl"; describe("QueuedRunsControl automatic completion delivery", () => { it("does not render a queue control when only hidden delivery remains", () => { state.projection = { projection: { messages: [ { delegatedCompletion: { parentRunId: "run:parent", generation: 1, taskIds: ["task:child"], }, id: "message:completion", }, ], }, }; state.workflow = { activeRun: { id: "run:active" }, canPromoteToSteer: true, canReorder: true, queuedRuns: [], }; const html = renderToStaticMarkup( undefined} onCancelEdit={() => undefined} />, ); expect(html).toBe(""); }); }); describe("QueuedRunsControl attachments and edit mode", () => { const workflowWithAttachment = () => ({ activeRun: { id: "run:active" }, canPromoteToSteer: true, canReorder: true, queuedRuns: [ { run: { id: "run:queued", userMessageId: "message:queued" }, text: "Queued with a screenshot", attachments: [ { type: "image", id: "attachment-1", name: "screenshot.png", mimeType: "image/png", sizeBytes: 128, }, ], }, ], }); it("renders an attachment thumbnail on the queued row", () => { state.projection = { projection: { messages: [] } }; state.workflow = workflowWithAttachment(); const html = renderToStaticMarkup( undefined} onCancelEdit={() => undefined} />, ); expect(html).toContain("https://assets.test/attachment-1"); expect(html).toContain("Queued with a screenshot"); expect(html).toContain("Edit queued message"); expect(html).toContain("Reorder queued message"); expect(html).not.toContain("Move queued message up"); }); it("drops the optimistic pending row once the projection holds its message", () => { state.projection = { projection: { messages: [{ id: "message:acknowledged", text: "hello" }] }, }; state.workflow = { activeRun: { id: "run:active" }, canPromoteToSteer: true, canReorder: true, queuedRuns: [], }; const html = renderToStaticMarkup( undefined} onCancelEdit={() => undefined} />, ); expect(html).toBe(""); }); it("keeps the original queued message visible while editing", () => { state.projection = { projection: { messages: [] } }; state.workflow = workflowWithAttachment(); const html = renderToStaticMarkup( undefined} onCancelEdit={() => undefined} />, ); expect(html).toContain("Queued with a screenshot"); }); });