| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import { describe, expect, it } from "vitest";
- import { WeChatRenderer } from "@/lib/webhook/renderers/wechat";
- import type { StructuredMessage } from "@/lib/webhook/types";
- describe("WeChatRenderer", () => {
- const renderer = new WeChatRenderer();
- it("should render basic message with header", () => {
- const message: StructuredMessage = {
- header: { title: "测试标题", icon: "🔔", level: "info" },
- sections: [],
- timestamp: new Date("2025-01-02T12:00:00Z"),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.msgtype).toBe("markdown");
- expect(body.markdown.content).toContain("🔔 测试标题");
- });
- it("should render text section", () => {
- const message: StructuredMessage = {
- header: { title: "标题", level: "info" },
- sections: [{ content: [{ type: "text", value: "普通文本内容" }] }],
- timestamp: new Date(),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("普通文本内容");
- });
- it("should render quote section", () => {
- const message: StructuredMessage = {
- header: { title: "标题", level: "warning" },
- sections: [{ content: [{ type: "quote", value: "引用内容" }] }],
- timestamp: new Date(),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("> 引用内容");
- });
- it("should render fields section", () => {
- const message: StructuredMessage = {
- header: { title: "标题", level: "error" },
- sections: [
- {
- title: "详细信息",
- content: [
- {
- type: "fields",
- items: [
- { label: "名称", value: "测试" },
- { label: "状态", value: "正常" },
- ],
- },
- ],
- },
- ],
- timestamp: new Date(),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("**详细信息**");
- expect(body.markdown.content).toContain("名称: 测试");
- expect(body.markdown.content).toContain("状态: 正常");
- });
- it("should render list section with icons", () => {
- const message: StructuredMessage = {
- header: { title: "排行榜", level: "info" },
- sections: [
- {
- content: [
- {
- type: "list",
- style: "ordered",
- items: [
- { icon: "🥇", primary: "用户A", secondary: "消费 $10" },
- { icon: "🥈", primary: "用户B", secondary: "消费 $5" },
- ],
- },
- ],
- },
- ],
- timestamp: new Date(),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("🥇 **用户A**");
- expect(body.markdown.content).toContain("消费 $10");
- });
- it("should render divider", () => {
- const message: StructuredMessage = {
- header: { title: "标题", level: "info" },
- sections: [{ content: [{ type: "divider" }] }],
- timestamp: new Date(),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("---");
- });
- it("should render footer sections", () => {
- const message: StructuredMessage = {
- header: { title: "标题", level: "info" },
- sections: [],
- footer: [{ content: [{ type: "text", value: "底部提示信息" }] }],
- timestamp: new Date(),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("底部提示信息");
- });
- it("should include timestamp", () => {
- const message: StructuredMessage = {
- header: { title: "标题", level: "info" },
- sections: [],
- timestamp: new Date("2025-01-02T12:00:00Z"),
- };
- const result = renderer.render(message);
- const body = JSON.parse(result.body);
- expect(body.markdown.content).toContain("2025");
- });
- });
|