Files
NetMesh/infrastructure/ai/streamStateErrors.test.ts

40 lines
1.8 KiB
TypeScript
Raw Normal View History

import assert from "node:assert/strict";
import test from "node:test";
import { isSdkStreamStateError } from "./shared/streamStateErrors";
test("isSdkStreamStateError matches the reasoning-part orphan-delta error", () => {
assert.equal(isSdkStreamStateError("reasoning part 0 not found"), true);
assert.equal(isSdkStreamStateError("reasoning part abc-123 not found"), true);
assert.equal(isSdkStreamStateError("Reasoning Part 0 Not Found"), true);
assert.equal(isSdkStreamStateError(" reasoning part 7 not found "), true);
});
test("isSdkStreamStateError matches the text-part orphan-delta error", () => {
assert.equal(isSdkStreamStateError("text part 0 not found"), true);
assert.equal(isSdkStreamStateError("text part X not found"), true);
});
test("isSdkStreamStateError accepts the error wrapped in an Error or `{ message }`", () => {
assert.equal(isSdkStreamStateError(new Error("reasoning part 0 not found")), true);
assert.equal(isSdkStreamStateError({ message: "reasoning part 0 not found" }), true);
});
test("isSdkStreamStateError ignores unrelated error strings", () => {
assert.equal(isSdkStreamStateError("Network error"), false);
assert.equal(
isSdkStreamStateError("400 messages.13: tool_use ids were found without tool_result blocks"),
false,
);
assert.equal(isSdkStreamStateError("reasoning part not found"), false, "missing the id segment shouldn't match");
assert.equal(isSdkStreamStateError("a reasoning part 0 not found"), false, "leading text shouldn't match");
});
test("isSdkStreamStateError handles non-error inputs without throwing", () => {
assert.equal(isSdkStreamStateError(undefined), false);
assert.equal(isSdkStreamStateError(null), false);
assert.equal(isSdkStreamStateError(42), false);
assert.equal(isSdkStreamStateError({}), false);
assert.equal(isSdkStreamStateError([]), false);
});