1import { describe, expect, it } from "vite-plus/test";
2
3import { mergeWorkflowAgentMetadata } from "./workflowAgentAnswers.ts";
4
5describe("mergeWorkflowAgentMetadata", () => {
6 it("keeps effort and speed across reads of a split assistant message", () => {
7 const metadata = mergeWorkflowAgentMetadata([
8 {
9 type: "assistant",
10 effort: "xhigh",
11 message: { id: "a", content: [], usage: { speed: "standard" } },
12 },
13 ]);
14 expect(metadata).toEqual({ messageId: "a", effort: "xhigh", speed: "standard" });
15 expect(
16 mergeWorkflowAgentMetadata(
17 [{ type: "assistant", message: { id: "a", content: [{ type: "text", text: "Done" }] } }],
18 metadata,
19 ),
20 ).toEqual(metadata);
21 expect(mergeWorkflowAgentMetadata([], metadata)).toEqual(metadata);
22 });
23
24 it("ignores bookkeeping and API errors without clearing prior metadata", () => {
25 const metadata = { messageId: "a", effort: "max", speed: "standard" };
26 expect(
27 mergeWorkflowAgentMetadata(
28 [
29 { type: "user", effort: "high", message: { usage: { speed: "fast" } } },
30 { type: "assistant", isMeta: true, effort: "high" },
31 { type: "assistant", isApiErrorMessage: true, message: { id: "error" } },
32 { type: "assistant", effort: 1, message: { id: "a", usage: { speed: false } } },
33 ],
34 metadata,
35 ),
36 ).toEqual(metadata);
37 });
38
39 it.each(["b", undefined])("clears omitted metadata for a new response with id %s", (id) => {
40 expect(
41 mergeWorkflowAgentMetadata([{ type: "assistant", message: { id, content: [] } }], {
42 messageId: "a",
43 effort: "max",
44 speed: "standard",
45 }),
46 ).toEqual(id === undefined ? {} : { messageId: id });
47 });
48});