import { describe, expect, test } from "bun:test"; import { insertBlockAfterToolResults } from "../contentArray"; describe("insertBlockAfterToolResults", () => { test("inserts after last tool_result", () => { const content: any[] = [ { type: "tool_result", content: "r1" }, { type: "text", text: "hello" }, ]; insertBlockAfterToolResults(content, { type: "text", text: "inserted" }); expect(content[1]).toEqual({ type: "text", text: "inserted" }); expect(content).toHaveLength(3); }); test("inserts after last of multiple tool_results", () => { const content: any[] = [ { type: "tool_result", content: "r1" }, { type: "tool_result", content: "r2" }, { type: "text", text: "end" }, ]; insertBlockAfterToolResults(content, { type: "text", text: "new" }); expect(content[2]).toEqual({ type: "text", text: "new" }); }); test("appends continuation when inserted block would be last", () => { const content: any[] = [{ type: "tool_result", content: "r1" }]; insertBlockAfterToolResults(content, { type: "text", text: "new" }); expect(content).toHaveLength(3); // original + inserted + continuation expect(content[2]).toEqual({ type: "text", text: "." }); }); test("inserts before last block when no tool_results", () => { const content: any[] = [ { type: "text", text: "a" }, { type: "text", text: "b" }, ]; insertBlockAfterToolResults(content, { type: "text", text: "new" }); expect(content[1]).toEqual({ type: "text", text: "new" }); expect(content).toHaveLength(3); }); test("handles empty array", () => { const content: any[] = []; insertBlockAfterToolResults(content, { type: "text", text: "new" }); expect(content).toHaveLength(1); expect(content[0]).toEqual({ type: "text", text: "new" }); }); test("handles single element array with no tool_result", () => { const content: any[] = [{ type: "text", text: "only" }]; insertBlockAfterToolResults(content, { type: "text", text: "new" }); expect(content[0]).toEqual({ type: "text", text: "new" }); expect(content[1]).toEqual({ type: "text", text: "only" }); }); test("inserts after last tool_result with mixed interleaving", () => { const content: any[] = [ { type: "tool_result", content: "r1" }, { type: "text", text: "mid1" }, { type: "tool_result", content: "r2" }, { type: "text", text: "mid2" }, { type: "tool_result", content: "r3" }, { type: "text", text: "end" }, ]; insertBlockAfterToolResults(content, { type: "text", text: "inserted" }); // Inserted after r3 (index 4), so at index 5 expect(content[5]).toEqual({ type: "text", text: "inserted" }); // Original end text should shift to index 6 expect(content[6]).toEqual({ type: "text", text: "end" }); expect(content).toHaveLength(7); }); });