Files
OmniRoute/tests/unit/chatcore-non-streaming-sse.test.ts
Diego Rodrigues de Sa e Souza 3c9883bb73 Release v3.8.29 (#4126)
OmniRoute v3.8.29 — 115 commits since v3.8.28. Full CHANGELOG + 41 i18n mirrors. All content quality gates green (build, unit 8/8, vitest 188/188, PR test policy, quality gates extended, docs sync, quality ratchet). Remaining red CI checks are pre-existing release flakes (coverage-shard/integration/node-compat teardown), a new transitive undici advisory in electron devDeps, and a workflow-level CodeQL fail (0 open alerts). VPS-validated by the operator.
2026-06-19 06:49:01 -03:00

73 lines
2.7 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import {
convertNDJSONToSSE,
normalizeNonStreamingEventPayload,
isTruthyStreamBody,
isEventStreamAccepted,
shouldTreatBufferedEventResponseAsExpected,
parseNonStreamingSSEPayload,
appendNonStreamingSseTerminalSignal,
type NonStreamingSseTerminalState,
} from "../../open-sse/handlers/chatCore/nonStreamingSse.ts";
import { FORMATS } from "../../open-sse/translator/formats.ts";
test("convertNDJSONToSSE wraps each non-empty line as a data: frame", () => {
const out = convertNDJSONToSSE('{"a":1}\n{"b":2}\n');
assert.ok(out.includes('data: {"a":1}\n'));
assert.ok(out.includes('data: {"b":2}\n'));
assert.equal(convertNDJSONToSSE(""), "");
});
test("normalizeNonStreamingEventPayload only converts x-ndjson content", () => {
const raw = '{"a":1}';
assert.equal(normalizeNonStreamingEventPayload(raw, "application/json"), raw);
assert.notEqual(normalizeNonStreamingEventPayload(raw, "application/x-ndjson"), raw);
});
test("stream-body and event-stream acceptance predicates", () => {
assert.equal(isTruthyStreamBody({ stream: true }), true);
assert.equal(isTruthyStreamBody({ stream: false }), false);
assert.equal(isTruthyStreamBody(null), false);
assert.equal(isEventStreamAccepted({ accept: "text/event-stream" }), true);
assert.equal(isEventStreamAccepted({ accept: "application/json" }), false);
assert.equal(
shouldTreatBufferedEventResponseAsExpected(
false,
{ accept: "application/json" },
{ stream: true }
),
true
);
assert.equal(
shouldTreatBufferedEventResponseAsExpected(false, { accept: "application/json" }, {}),
false
);
});
test("appendNonStreamingSseTerminalSignal detects [DONE] and terminal event types", () => {
const done: NonStreamingSseTerminalState = { currentEvent: "", pendingLine: "" };
assert.equal(appendNonStreamingSseTerminalSignal(done, "data: [DONE]\n"), true);
const stop: NonStreamingSseTerminalState = { currentEvent: "", pendingLine: "" };
assert.equal(appendNonStreamingSseTerminalSignal(stop, "event: message_stop\ndata: {}\n"), true);
const delta: NonStreamingSseTerminalState = { currentEvent: "", pendingLine: "" };
assert.equal(
appendNonStreamingSseTerminalSignal(delta, 'data: {"type":"content_block_delta"}\n'),
false
);
});
test("parseNonStreamingSSEPayload parses an OpenAI-format SSE buffer", () => {
const raw =
'data: {"id":"x","choices":[{"delta":{"content":"hi"},"finish_reason":"stop"}]}\n\ndata: [DONE]\n';
const result = parseNonStreamingSSEPayload(raw, FORMATS.OPENAI, "gpt-4o");
assert.ok(result !== null);
assert.equal(result?.format, FORMATS.OPENAI);
assert.equal(typeof result?.body, "object");
});