openclaw/src/plugins/runtime/runtime-telegram-typing.test.ts
2026-03-17 07:23:44 +00:00

67 lines
1.7 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import { createTelegramTypingLease } from "./runtime-telegram-typing.js";
import {
expectBackgroundTypingPulseFailuresAreSwallowed,
expectIndependentTypingLeases,
} from "./typing-lease.test-support.js";
describe("createTelegramTypingLease", () => {
afterEach(() => {
vi.useRealTimers();
});
it("pulses immediately and keeps leases independent", async () => {
await expectIndependentTypingLeases({
createLease: createTelegramTypingLease,
buildParams: (pulse) => ({
to: "telegram:123",
intervalMs: 2_000,
pulse,
}),
});
});
it("swallows background pulse failures", async () => {
const pulse = vi
.fn<
(params: {
to: string;
accountId?: string;
cfg?: unknown;
messageThreadId?: number;
}) => Promise<unknown>
>()
.mockResolvedValueOnce(undefined)
.mockRejectedValueOnce(new Error("boom"));
await expectBackgroundTypingPulseFailuresAreSwallowed({
createLease: createTelegramTypingLease,
pulse,
buildParams: (pulse) => ({
to: "telegram:123",
intervalMs: 2_000,
pulse,
}),
});
});
it("falls back to the default interval for non-finite values", async () => {
vi.useFakeTimers();
const pulse = vi.fn(async () => undefined);
const lease = await createTelegramTypingLease({
to: "telegram:123",
intervalMs: Number.NaN,
pulse,
});
expect(pulse).toHaveBeenCalledTimes(1);
await vi.advanceTimersByTimeAsync(3_999);
expect(pulse).toHaveBeenCalledTimes(1);
await vi.advanceTimersByTimeAsync(1);
expect(pulse).toHaveBeenCalledTimes(2);
lease.stop();
});
});