import { describe, expect, it } from "vitest" ;
import type { ReplyPayload } from "../types.js" ;
import { createReplyDispatcher } from "./reply-dispatcher.js" ;
describe("beforeDeliver in reply dispatcher" , () => {
it("cancels delivery when beforeDeliver returns null" , async () => {
const delivered: string[] = [];
const dispatcher = createReplyDispatcher({
deliver: async (payload) => {
delivered.push(payload.text ?? "" );
},
beforeDeliver: async (payload: ReplyPayload) => {
if (payload.text?.includes("blocked" )) {
return null ;
}
return payload;
},
});
dispatcher.sendFinalReply({ text: "blocked reply" });
dispatcher.sendFinalReply({ text: "safe reply" });
dispatcher.markComplete();
await dispatcher.waitForIdle();
expect(delivered).toEqual(["safe reply" ]);
expect(dispatcher.getQueuedCounts()).toEqual({ tool: 0 , block: 0 , final : 2 });
expect(dispatcher.getCancelledCounts?.()).toEqual({ tool: 0 , block: 0 , final : 1 });
});
it("allows modifying payload in beforeDeliver" , async () => {
const delivered: string[] = [];
const dispatcher = createReplyDispatcher({
deliver: async (payload) => {
delivered.push(payload.text ?? "" );
},
beforeDeliver: async (payload: ReplyPayload) => {
if (payload.text?.includes("error" )) {
return { ...payload, text: "replaced" };
}
return payload;
},
});
dispatcher.sendFinalReply({ text: "some error occurred" });
dispatcher.markComplete();
await dispatcher.waitForIdle();
expect(delivered).toEqual(["replaced" ]);
});
it("delivers normally without beforeDeliver" , async () => {
const delivered: string[] = [];
const dispatcher = createReplyDispatcher({
deliver: async (payload) => {
delivered.push(payload.text ?? "" );
},
});
dispatcher.sendFinalReply({ text: "plain reply" });
dispatcher.markComplete();
await dispatcher.waitForIdle();
expect(delivered).toEqual(["plain reply" ]);
});
});
Messung V0.5 in Prozent C=96 H=89 G=92
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland