From 9baa853797bbf076e4bcd40aac7bbab8a8df0df7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 29 Mar 2026 22:10:30 +0100 Subject: [PATCH] test: isolate image read helper coverage --- ...aliases-schemas-without-dropping-d.test.ts | 20 +++++++++++-------- src/agents/test-helpers/fast-tool-stubs.ts | 4 ++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping-d.test.ts b/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping-d.test.ts index 4ae403b902d..1c78284ad8a 100644 --- a/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping-d.test.ts +++ b/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping-d.test.ts @@ -14,7 +14,7 @@ const tinyPngBuffer = Buffer.from( ); describe("createOpenClawCodingTools", () => { - it("returns image metadata for images and text-only blocks for text files", async () => { + it("returns image-aware read metadata for images and text-only blocks for text files", async () => { const readTool = defaultTools.find((tool) => tool.name === "read"); expect(readTool).toBeDefined(); @@ -27,15 +27,19 @@ describe("createOpenClawCodingTools", () => { path: imagePath, }); - expect(imageResult?.content?.some((block) => block.type === "image")).toBe(true); - const imageText = imageResult?.content?.find((block) => block.type === "text") as - | { text?: string } + const imageBlocks = imageResult?.content?.filter((block) => block.type === "image") as + | Array<{ mimeType?: string }> | undefined; - expect(imageText?.text ?? "").toContain("Read image file [image/png]"); - const image = imageResult?.content?.find((block) => block.type === "image") as - | { mimeType?: string } + const imageTextBlocks = imageResult?.content?.filter((block) => block.type === "text") as + | Array<{ text?: string }> | undefined; - expect(image?.mimeType).toBe("image/png"); + const imageText = imageTextBlocks?.map((block) => block.text ?? "").join("\n") ?? ""; + expect(imageText).toContain("Read image file [image/png]"); + if ((imageBlocks?.length ?? 0) > 0) { + expect(imageBlocks?.every((block) => block.mimeType === "image/png")).toBe(true); + } else { + expect(imageText).toContain("[Image omitted:"); + } const textPath = path.join(tmpDir, "sample.txt"); const contents = "Hello from openclaw read tool."; diff --git a/src/agents/test-helpers/fast-tool-stubs.ts b/src/agents/test-helpers/fast-tool-stubs.ts index 114abb2144f..d04a84309a2 100644 --- a/src/agents/test-helpers/fast-tool-stubs.ts +++ b/src/agents/test-helpers/fast-tool-stubs.ts @@ -19,6 +19,10 @@ vi.mock("../tools/image-tool.js", () => ({ createImageTool: () => stubTool("image"), })); +vi.mock("../tools/image-generate-tool.js", () => ({ + createImageGenerateTool: () => stubTool("image_generate"), +})); + vi.mock("../tools/web-tools.js", () => ({ createWebSearchTool: () => null, createWebFetchTool: () => null,