75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { resolveToolCallPreview } from "./tool-call-preview";
|
|
import type { CommandDetails, EditEntry, ReadEntry } from "@/utils/tool-call-parsers";
|
|
|
|
describe("resolveToolCallPreview", () => {
|
|
it("prefers parsed hydration payloads when provided", () => {
|
|
const parsedEdits: EditEntry[] = [
|
|
{
|
|
filePath: "README.md",
|
|
diffLines: [
|
|
{ type: "header", content: "@@ -1 +1 @@" },
|
|
{ type: "remove", content: "-Old" },
|
|
{ type: "add", content: "+New" },
|
|
],
|
|
},
|
|
];
|
|
const parsedReads: ReadEntry[] = [
|
|
{
|
|
filePath: "README.md",
|
|
content: "# Hydrated\nFinal text\n",
|
|
},
|
|
];
|
|
const parsedCommand: CommandDetails = {
|
|
command: "ls",
|
|
cwd: "/tmp/hydrated",
|
|
output: "README.md\npackages\n",
|
|
exitCode: 0,
|
|
};
|
|
|
|
const preview = resolveToolCallPreview({
|
|
parsedEditEntries: parsedEdits,
|
|
parsedReadEntries: parsedReads,
|
|
parsedCommandDetails: parsedCommand,
|
|
});
|
|
|
|
expect(preview.editEntries).toBe(parsedEdits);
|
|
expect(preview.readEntries).toBe(parsedReads);
|
|
expect(preview.commandDetails).toBe(parsedCommand);
|
|
});
|
|
|
|
it("falls back to derived parser output when hydration metadata is missing", () => {
|
|
const args = {
|
|
type: "mcp_tool_use",
|
|
id: "call_fallback",
|
|
name: "apply_patch",
|
|
server: "editor",
|
|
input: {
|
|
file_path: "README.md",
|
|
patch: "*** Begin Patch\n*** Update File: README.md\n@@\n-Old\n+New\n*** End Patch",
|
|
},
|
|
};
|
|
const result = {
|
|
changes: [
|
|
{
|
|
file_path: "README.md",
|
|
previous_content: "Old\n",
|
|
content: "New\n",
|
|
},
|
|
],
|
|
};
|
|
|
|
const preview = resolveToolCallPreview({
|
|
args,
|
|
result,
|
|
});
|
|
|
|
expect(preview.editEntries[0]?.diffLines.length).toBeGreaterThan(0);
|
|
expect(
|
|
preview.editEntries[0]?.diffLines.some((line) => line.content.includes("+New"))
|
|
).toBe(true);
|
|
expect(preview.commandDetails).toBeNull();
|
|
});
|
|
});
|