34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { readStoredToolError, serializeToolError } from "../utils/tool-errors";
|
|
|
|
const validationError = "Invalid input for tool search: Type validation failed: Value: {\"query\":123}.\nError message: [{\"code\":\"custom\"}]";
|
|
|
|
test("tool Error instances persist their message, not an empty JSON object", () => {
|
|
expect(serializeToolError(new Error(validationError))).toBe(validationError);
|
|
expect(serializeToolError(validationError)).toBe(validationError);
|
|
expect(serializeToolError({ reason: "invalid input" })).toBe('{"reason":"invalid input"}');
|
|
});
|
|
|
|
test("text validation errors remain text on history replay", () => {
|
|
expect(readStoredToolError({ type: "text", value: validationError })).toEqual({
|
|
type: "error-text",
|
|
value: validationError,
|
|
});
|
|
});
|
|
|
|
test("legacy mislabeled JSON errors cannot break subsequent prompts", () => {
|
|
expect(readStoredToolError({ type: "json", value: validationError })).toEqual({
|
|
type: "error-text",
|
|
value: validationError,
|
|
});
|
|
});
|
|
|
|
test("preserves actual JSON errors and handles missing errors", () => {
|
|
expect(readStoredToolError({ type: "json", value: '{"reason":"bad input"}' })).toEqual({
|
|
type: "error-json",
|
|
value: { reason: "bad input" },
|
|
});
|
|
expect(readStoredToolError(null).type).toBe("error-text");
|
|
expect(readStoredToolError(undefined).type).toBe("error-text");
|
|
});
|