Files
diegosouzapw--omniroute/tests/unit/stream-handler-client-disconnect.test.ts
2026-07-13 13:39:12 +08:00

41 lines
1.7 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
const { isClientDisconnectError } = await import("../../open-sse/utils/streamHandler.ts");
test("client disconnect: AbortError is a client disconnect, not a provider failure", () => {
const err = new Error("aborted");
err.name = "AbortError";
assert.equal(isClientDisconnectError(err), true);
});
test("client disconnect: ResponseAborted is a client disconnect", () => {
const err = new Error("The response was aborted");
err.name = "ResponseAborted";
assert.equal(isClientDisconnectError(err), true);
});
test("client disconnect: 'Controller is already closed' TypeError is a client disconnect", () => {
// Thrown when OmniRoute enqueues into a response stream the client already closed.
// name is "TypeError", so this must be matched by message, not name.
const err = new TypeError("Invalid state: Controller is already closed");
assert.equal(isClientDisconnectError(err), true);
});
test("client disconnect: a real provider 502/500 is NOT a client disconnect", () => {
const err = Object.assign(new Error("Upstream stream failed"), { statusCode: 502 });
assert.equal(isClientDisconnectError(err), false);
});
test("client disconnect: a rate-limit (429) error is NOT a client disconnect", () => {
const err = Object.assign(new Error("rate_limit_error"), { statusCode: 429 });
assert.equal(isClientDisconnectError(err), false);
});
test("client disconnect: null / string / plain object are NOT client disconnects", () => {
assert.equal(isClientDisconnectError(null), false);
assert.equal(isClientDisconnectError(undefined), false);
assert.equal(isClientDisconnectError("Controller is already closed"), false);
assert.equal(isClientDisconnectError({}), false);
});