import { describe, expect, it } from "vitest"; import { getChannelStreamingConfigObject, resolveChannelStreamingBlockCoalesce, resolveChannelStreamingBlockEnabled, resolveChannelStreamingChunkMode, resolveChannelStreamingNativeTransport, resolveChannelStreamingPreviewChunk, } from "./channel-streaming.js"; describe("channel-streaming", () => { it("reads canonical nested streaming config first", () => { const entry = { streaming: { chunkMode: "newline", nativeTransport: true, block: { enabled: true, coalesce: { minChars: 40, maxChars: 80, idleMs: 250 }, }, preview: { chunk: { minChars: 10, maxChars: 20, breakPreference: "sentence" }, }, }, chunkMode: "length", blockStreaming: false, nativeStreaming: false, blockStreamingCoalesce: { minChars: 5, maxChars: 15, idleMs: 100 }, draftChunk: { minChars: 2, maxChars: 4, breakPreference: "paragraph" }, } as const; expect(getChannelStreamingConfigObject(entry)).toEqual(entry.streaming); expect(resolveChannelStreamingChunkMode(entry)).toBe("newline"); expect(resolveChannelStreamingNativeTransport(entry)).toBe(true); expect(resolveChannelStreamingBlockEnabled(entry)).toBe(true); expect(resolveChannelStreamingBlockCoalesce(entry)).toEqual({ minChars: 40, maxChars: 80, idleMs: 250, }); expect(resolveChannelStreamingPreviewChunk(entry)).toEqual({ minChars: 10, maxChars: 20, breakPreference: "sentence", }); }); it("falls back to legacy flat fields when the canonical object is absent", () => { const entry = { chunkMode: "newline", blockStreaming: true, nativeStreaming: true, blockStreamingCoalesce: { minChars: 120, maxChars: 240, idleMs: 500 }, draftChunk: { minChars: 8, maxChars: 16, breakPreference: "newline" }, } as const; expect(getChannelStreamingConfigObject(entry)).toBeUndefined(); expect(resolveChannelStreamingChunkMode(entry)).toBe("newline"); expect(resolveChannelStreamingNativeTransport(entry)).toBe(true); expect(resolveChannelStreamingBlockEnabled(entry)).toBe(true); expect(resolveChannelStreamingBlockCoalesce(entry)).toEqual({ minChars: 120, maxChars: 240, idleMs: 500, }); expect(resolveChannelStreamingPreviewChunk(entry)).toEqual({ minChars: 8, maxChars: 16, breakPreference: "newline", }); }); });