import { describe, expect, it } from "vitest"; import { TelegramRenderer } from "@/lib/webhook/renderers/telegram"; import type { StructuredMessage } from "@/lib/webhook/types"; describe("TelegramRenderer", () => { it("should render HTML payload with chat_id and parse_mode", () => { const renderer = new TelegramRenderer("123"); const message: StructuredMessage = { header: { title: '测试 <标题>&"', level: "info" }, sections: [ { content: [{ type: "text", value: 'Hello & "' }] }, { content: [{ type: "quote", value: "引用 " }] }, { title: "字段", content: [ { type: "fields", items: [{ label: "状态", value: "&" }], }, ], }, { content: [ { type: "list", style: "bullet", items: [{ primary: "用户A", secondary: '消费 <10>& "' }], }, ], }, ], timestamp: new Date("2025-01-02T12:00:00Z"), }; const result = renderer.render(message); const body = JSON.parse(result.body) as any; expect(body.chat_id).toBe("123"); expect(body.parse_mode).toBe("HTML"); expect(body.disable_web_page_preview).toBe(true); expect(body.text).toContain("测试 <标题>&""); expect(body.text).toContain("Hello & <world> ""); expect(body.text).toContain("> 引用 <tag>"); expect(body.text).toContain("字段"); expect(body.text).toContain("状态: <OK>&"); expect(body.text).toContain("- 用户A"); expect(body.text).toContain("消费 <10>& ""); expect(body.text).toContain("2025"); }); });