Files
pi-webui/tests/tool-result-summary.test.ts

26 lines
1.4 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { summarizeToolResultContent, summarizeToolResultData } from "../client/tool-result-summary.ts";
test("summarizes image result content", () => {
assert.equal(summarizeToolResultContent([{ type: "image", mimeType: "image/png" }]), "1 image · image/png");
assert.equal(summarizeToolResultContent([{ type: "image", mimeType: "image/png" }, { type: "image", mimeType: "image/jpeg" }]), "2 images · image/png, image/jpeg");
assert.equal(summarizeToolResultContent([{ type: "text" }]), "");
});
test("summarizes generic result counts and pagination", () => {
assert.equal(summarizeToolResultData({ items: [{}, {}], page: { has_more: true } }, false, 20), "2 items · more available");
assert.equal(summarizeToolResultData({ results: { one: { rows: [{}] } }, truncated: true }, false, 20), "1 item · truncated");
});
test("summarizes errors without exposing an unbounded error code", () => {
const code = "x".repeat(100);
assert.equal(summarizeToolResultData({ error: code }, false, 0), `error: ${"x".repeat(80)}`);
assert.equal(summarizeToolResultData({}, true, 0), "error");
});
test("uses output size only when structured data has no summary", () => {
assert.equal(summarizeToolResultData({}, false, 1234), "1,234 chars");
assert.equal(summarizeToolResultData({}, false, 0), "no output");
});