mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-27 14:44:23 +00:00
63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { createNativeTelegramToolProgressDraft } from "./native-tool-progress-draft.js";
|
|
|
|
describe("createNativeTelegramToolProgressDraft", () => {
|
|
const createSendMessageDraftMock = (implementation?: () => Promise<unknown>) =>
|
|
vi.fn(
|
|
async (
|
|
_chatId: number | string,
|
|
_draftId: number,
|
|
_text?: string,
|
|
_params?: Record<string, unknown>,
|
|
) => implementation?.(),
|
|
);
|
|
|
|
it("returns undefined when the Bot API client has no sendMessageDraft method", () => {
|
|
const draft = createNativeTelegramToolProgressDraft({
|
|
api: {},
|
|
chatId: 123,
|
|
} as never);
|
|
|
|
expect(draft).toBeUndefined();
|
|
});
|
|
|
|
it("updates the same non-zero draft id for animated native progress", async () => {
|
|
const sendMessageDraft = createSendMessageDraftMock();
|
|
const draft = createNativeTelegramToolProgressDraft({
|
|
api: { sendMessageDraft },
|
|
chatId: 123,
|
|
thread: { id: 456, scope: "dm" },
|
|
} as never);
|
|
|
|
expect(draft).toBeDefined();
|
|
await draft?.update("Running command");
|
|
|
|
expect(sendMessageDraft).toHaveBeenCalledTimes(1);
|
|
const firstDraftId = sendMessageDraft.mock.calls[0]?.[1];
|
|
expect(firstDraftId).toEqual(expect.any(Number));
|
|
expect(firstDraftId).not.toBe(0);
|
|
expect(sendMessageDraft).toHaveBeenLastCalledWith(123, firstDraftId, "Running command", {
|
|
message_thread_id: 456,
|
|
});
|
|
});
|
|
|
|
it("stops after a Telegram rejection so callers can fall back silently", async () => {
|
|
const sendMessageDraft = createSendMessageDraftMock(async () => {
|
|
throw new Error("Bad Request: method is unavailable");
|
|
});
|
|
const log = vi.fn();
|
|
const draft = createNativeTelegramToolProgressDraft({
|
|
api: { sendMessageDraft },
|
|
chatId: 123,
|
|
log,
|
|
} as never);
|
|
|
|
expect(draft).toBeDefined();
|
|
await expect(draft?.update("Running command")).resolves.toBe(false);
|
|
await expect(draft?.update("Still running")).resolves.toBe(false);
|
|
|
|
expect(sendMessageDraft).toHaveBeenCalledTimes(1);
|
|
expect(log).toHaveBeenCalledWith(expect.stringContaining("disabled"));
|
|
});
|
|
});
|