Files
openclaw/src/plugin-sdk/channel-streaming.test.ts

77 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
getChannelStreamingConfigObject,
resolveChannelStreamingBlockCoalesce,
resolveChannelStreamingBlockEnabled,
resolveChannelStreamingChunkMode,
resolveChannelStreamingNativeTransport,
resolveChannelStreamingPreviewChunk,
resolveChannelStreamingPreviewToolProgress,
} 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" },
toolProgress: false,
},
},
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",
});
expect(resolveChannelStreamingPreviewToolProgress(entry)).toBe(false);
});
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",
});
expect(resolveChannelStreamingPreviewToolProgress(entry)).toBe(true);
});
});