msg: retry web/telegram sends and add regression tests

This commit is contained in:
Peter Steinberger
2025-12-09 17:23:04 +00:00
parent f9370718bc
commit d04f7fc6e9
3 changed files with 169 additions and 30 deletions

View File

@@ -0,0 +1,69 @@
import { describe, expect, it, vi } from "vitest";
vi.mock("../src/web/media.js", () => ({
loadWebMedia: vi.fn(async () => ({
buffer: Buffer.from("img"),
contentType: "image/jpeg",
kind: "image",
fileName: "img.jpg",
})),
}));
import { deliverWebReply } from "../src/web/auto-reply.js";
import { defaultRuntime } from "../src/runtime.js";
const noopLogger = {
info: vi.fn(),
warn: vi.fn(),
};
function makeMsg() {
return {
from: "+10000000000",
to: "+20000000000",
id: "abc",
reply: vi.fn(),
sendMedia: vi.fn(),
} as any;
}
describe("deliverWebReply retry", () => {
it("retries text send on transient failure", async () => {
const msg = makeMsg();
msg.reply.mockRejectedValueOnce(new Error("connection closed"));
msg.reply.mockResolvedValueOnce(undefined);
await expect(
deliverWebReply({
replyResult: { text: "hi" },
msg,
maxMediaBytes: 5_000_000,
replyLogger: noopLogger,
runtime: defaultRuntime,
skipLog: true,
}),
).resolves.toBeUndefined();
expect(msg.reply).toHaveBeenCalledTimes(2);
});
it("retries media send on transient failure", async () => {
const msg = makeMsg();
msg.sendMedia.mockRejectedValueOnce(new Error("socket reset"));
msg.sendMedia.mockResolvedValueOnce(undefined);
await expect(
deliverWebReply({
replyResult: { text: "caption", mediaUrl: "http://example.com/img.jpg" },
msg,
maxMediaBytes: 5_000_000,
replyLogger: noopLogger,
runtime: defaultRuntime,
skipLog: true,
}),
).resolves.toBeUndefined();
expect(msg.sendMedia).toHaveBeenCalledTimes(2);
});
});