mirror of https://github.com/openclaw/openclaw.git
refactor: share telegram dispatch failure harness
This commit is contained in:
parent
2cd1a4b8dd
commit
f201bad372
|
|
@ -57,6 +57,21 @@ describe("telegram bot message processor", () => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createDispatchFailureHarness(
|
||||||
|
context: Record<string, unknown>,
|
||||||
|
sendMessage: ReturnType<typeof vi.fn>,
|
||||||
|
) {
|
||||||
|
const runtimeError = vi.fn();
|
||||||
|
buildTelegramMessageContext.mockResolvedValue(context);
|
||||||
|
dispatchTelegramMessage.mockRejectedValue(new Error("dispatch exploded"));
|
||||||
|
const processMessage = createTelegramMessageProcessor({
|
||||||
|
...baseDeps,
|
||||||
|
bot: { api: { sendMessage } },
|
||||||
|
runtime: { error: runtimeError },
|
||||||
|
} as unknown as Parameters<typeof createTelegramMessageProcessor>[0]);
|
||||||
|
return { processMessage, runtimeError };
|
||||||
|
}
|
||||||
|
|
||||||
it("dispatches when context is available", async () => {
|
it("dispatches when context is available", async () => {
|
||||||
buildTelegramMessageContext.mockResolvedValue({ route: { sessionKey: "agent:main:main" } });
|
buildTelegramMessageContext.mockResolvedValue({ route: { sessionKey: "agent:main:main" } });
|
||||||
|
|
||||||
|
|
@ -75,19 +90,14 @@ describe("telegram bot message processor", () => {
|
||||||
|
|
||||||
it("sends user-visible fallback when dispatch throws", async () => {
|
it("sends user-visible fallback when dispatch throws", async () => {
|
||||||
const sendMessage = vi.fn().mockResolvedValue(undefined);
|
const sendMessage = vi.fn().mockResolvedValue(undefined);
|
||||||
const runtimeError = vi.fn();
|
const { processMessage, runtimeError } = createDispatchFailureHarness(
|
||||||
buildTelegramMessageContext.mockResolvedValue({
|
{
|
||||||
chatId: 123,
|
chatId: 123,
|
||||||
threadSpec: { id: 456 },
|
threadSpec: { id: 456 },
|
||||||
route: { sessionKey: "agent:main:main" },
|
route: { sessionKey: "agent:main:main" },
|
||||||
});
|
},
|
||||||
dispatchTelegramMessage.mockRejectedValue(new Error("dispatch exploded"));
|
sendMessage,
|
||||||
|
);
|
||||||
const processMessage = createTelegramMessageProcessor({
|
|
||||||
...baseDeps,
|
|
||||||
bot: { api: { sendMessage } },
|
|
||||||
runtime: { error: runtimeError },
|
|
||||||
} as unknown as Parameters<typeof createTelegramMessageProcessor>[0]);
|
|
||||||
await expect(processSampleMessage(processMessage)).resolves.toBeUndefined();
|
await expect(processSampleMessage(processMessage)).resolves.toBeUndefined();
|
||||||
|
|
||||||
expect(sendMessage).toHaveBeenCalledWith(
|
expect(sendMessage).toHaveBeenCalledWith(
|
||||||
|
|
@ -100,18 +110,13 @@ describe("telegram bot message processor", () => {
|
||||||
|
|
||||||
it("swallows fallback delivery failures after dispatch throws", async () => {
|
it("swallows fallback delivery failures after dispatch throws", async () => {
|
||||||
const sendMessage = vi.fn().mockRejectedValue(new Error("blocked by user"));
|
const sendMessage = vi.fn().mockRejectedValue(new Error("blocked by user"));
|
||||||
const runtimeError = vi.fn();
|
const { processMessage, runtimeError } = createDispatchFailureHarness(
|
||||||
buildTelegramMessageContext.mockResolvedValue({
|
{
|
||||||
chatId: 123,
|
chatId: 123,
|
||||||
route: { sessionKey: "agent:main:main" },
|
route: { sessionKey: "agent:main:main" },
|
||||||
});
|
},
|
||||||
dispatchTelegramMessage.mockRejectedValue(new Error("dispatch exploded"));
|
sendMessage,
|
||||||
|
);
|
||||||
const processMessage = createTelegramMessageProcessor({
|
|
||||||
...baseDeps,
|
|
||||||
bot: { api: { sendMessage } },
|
|
||||||
runtime: { error: runtimeError },
|
|
||||||
} as unknown as Parameters<typeof createTelegramMessageProcessor>[0]);
|
|
||||||
await expect(processSampleMessage(processMessage)).resolves.toBeUndefined();
|
await expect(processSampleMessage(processMessage)).resolves.toBeUndefined();
|
||||||
|
|
||||||
expect(sendMessage).toHaveBeenCalledWith(
|
expect(sendMessage).toHaveBeenCalledWith(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue