Files
openclaw/extensions/telegram/src/approval-handler.runtime.test.ts
2026-04-07 16:06:02 -04:00

122 lines
3.0 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { telegramApprovalNativeRuntime } from "./approval-handler.runtime.js";
describe("telegramApprovalNativeRuntime", () => {
it("renders only the allowed pending buttons", async () => {
const payload = await telegramApprovalNativeRuntime.presentation.buildPendingPayload({
cfg: {} as never,
accountId: "default",
context: {
token: "tg-token",
},
request: {
id: "req-1",
request: {
command: "echo hi",
},
createdAtMs: 0,
expiresAtMs: 60_000,
},
approvalKind: "exec",
nowMs: 0,
view: {
approvalKind: "exec",
approvalId: "req-1",
commandText: "echo hi",
actions: [
{
decision: "allow-once",
label: "Allow Once",
command: "/approve req-1 allow-once",
style: "success",
},
{
decision: "deny",
label: "Deny",
command: "/approve req-1 deny",
style: "danger",
},
],
} as never,
});
expect(payload.text).toContain("/approve req-1 allow-once");
expect(payload.text).not.toContain("allow-always");
expect(payload.buttons?.[0]?.map((button) => button.text)).toEqual(["Allow Once", "Deny"]);
});
it("passes topic thread ids to typing and message delivery", async () => {
const sendTyping = vi.fn().mockResolvedValue({ ok: true });
const sendMessage = vi.fn().mockResolvedValue({
chatId: "-1003841603622",
messageId: "m1",
});
const entry = await telegramApprovalNativeRuntime.transport.deliverPending({
cfg: {} as never,
accountId: "default",
context: {
token: "tg-token",
deps: {
sendTyping,
sendMessage,
},
},
plannedTarget: {
surface: "origin",
reason: "preferred",
target: {
to: "-1003841603622",
threadId: 928,
},
},
preparedTarget: {
chatId: "-1003841603622",
messageThreadId: 928,
},
request: {
id: "req-1",
request: {
command: "echo hi",
},
createdAtMs: 0,
expiresAtMs: 60_000,
},
approvalKind: "exec",
view: {
approvalKind: "exec",
approvalId: "req-1",
commandText: "echo hi",
actions: [],
} as never,
pendingPayload: {
text: "pending",
buttons: [],
},
});
expect(sendTyping).toHaveBeenCalledWith(
"-1003841603622",
expect.objectContaining({
token: "tg-token",
accountId: "default",
messageThreadId: 928,
}),
);
expect(sendMessage).toHaveBeenCalledWith(
"-1003841603622",
"pending",
expect.objectContaining({
token: "tg-token",
accountId: "default",
messageThreadId: 928,
buttons: [],
}),
);
expect(entry).toEqual({
chatId: "-1003841603622",
messageId: "m1",
});
});
});