Fix admin authorization and harden chat requests
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import {createStreamRenderer} from "../public/js/streamRenderer.js";
|
||||
import {createTextStreamEvents} from "../src/services/streamEvents.js";
|
||||
|
||||
test("streaming sends linear-sized deltas, applies replacements and batches rendering", () => {
|
||||
const events = [], frames = new Map(), rendered = [];
|
||||
let nextId = 0;
|
||||
const renderer = createStreamRenderer({
|
||||
onReply: text => rendered.push(["reply", text]), onThinking: text => rendered.push(["thinking", text]),
|
||||
schedule: callback => { frames.set(++nextId, callback); return nextId; }, cancel: id => frames.delete(id)
|
||||
});
|
||||
const emit = createTextStreamEvents((type, data) => {
|
||||
events.push({type, data});
|
||||
renderer[{chunk: "onChunk", thinking: "onThinking", replace: "onReplace"}[type]](data);
|
||||
});
|
||||
for (let i = 0; i < 1000; i++) emit.onChunk("a", "a".repeat(i + 1));
|
||||
assert.equal(JSON.stringify(events).length < 45000, true);
|
||||
assert.equal(frames.size, 1);
|
||||
assert.equal(rendered.length, 0);
|
||||
renderer.flush();
|
||||
assert.deepEqual(rendered, [["reply", "a".repeat(1000)]]);
|
||||
emit.onThinking("provisional", "provisional");
|
||||
emit.onThinking("", ""); emit.onChunk("", "");
|
||||
emit.onChunk("Corrected", "Corrected");
|
||||
renderer.flush();
|
||||
assert.deepEqual(rendered.slice(1), [["thinking", ""], ["reply", "Corrected"]]);
|
||||
assert.ok(events.some(event => event.type === "replace" && event.data.target === "reply"));
|
||||
renderer.onChunk({chunk: " stale"});
|
||||
renderer.dispose();
|
||||
assert.equal(frames.size, 0);
|
||||
renderer.flush();
|
||||
assert.equal(rendered.at(-1)[1], "Corrected");
|
||||
renderer.onChunk({chunk: "", fullReply: ""});
|
||||
renderer.onChunk({chunk: "Legacy", fullReply: "Legacy"});
|
||||
renderer.flush();
|
||||
assert.equal(rendered.at(-1)[1], "Legacy");
|
||||
});
|
||||
Reference in New Issue
Block a user