Files
openclaw/src/agents/pi-embedded-subscribe.block-reply-rejections.test.ts
2026-03-07 10:52:16 +05:30

58 lines
1.8 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import {
createSubscribedSessionHarness,
emitAssistantTextDelta,
emitAssistantTextEnd,
emitMessageStartAndEndForAssistantText,
} from "./pi-embedded-subscribe.e2e-harness.js";
const waitForAsyncCallbacks = async () => {
await Promise.resolve();
await new Promise((resolve) => setTimeout(resolve, 0));
};
describe("subscribeEmbeddedPiSession block reply rejections", () => {
const unhandledRejections: unknown[] = [];
const onUnhandledRejection = (reason: unknown) => {
unhandledRejections.push(reason);
};
afterEach(() => {
process.off("unhandledRejection", onUnhandledRejection);
unhandledRejections.length = 0;
});
it("contains rejected async text_end block replies", async () => {
process.on("unhandledRejection", onUnhandledRejection);
const onBlockReply = vi.fn().mockRejectedValue(new Error("boom"));
const { emit } = createSubscribedSessionHarness({
runId: "run",
onBlockReply,
blockReplyBreak: "text_end",
});
emitAssistantTextDelta({ emit, delta: "Hello block" });
emitAssistantTextEnd({ emit });
await waitForAsyncCallbacks();
expect(onBlockReply).toHaveBeenCalledTimes(1);
expect(unhandledRejections).toHaveLength(0);
});
it("contains rejected async message_end block replies", async () => {
process.on("unhandledRejection", onUnhandledRejection);
const onBlockReply = vi.fn().mockRejectedValue(new Error("boom"));
const { emit } = createSubscribedSessionHarness({
runId: "run",
onBlockReply,
blockReplyBreak: "message_end",
});
emitMessageStartAndEndForAssistantText({ emit, text: "Hello block" });
await waitForAsyncCallbacks();
expect(onBlockReply).toHaveBeenCalledTimes(1);
expect(unhandledRejections).toHaveLength(0);
});
});