



















@@ -17,6 +17,7 @@ import {
1717} from "./message-cache.js";
1818import { clearTelegramRuntime, setTelegramRuntime } from "./runtime.js";
1919import type { TelegramRuntime } from "./runtime.types.js";
20+import type { TelegramApiOverride } from "./send.js";
2021import {
2122getTelegramSendTestMocks,
2223importTelegramSendModule,
@@ -64,7 +65,12 @@ const {
6465} = telegramSendModule;
6566const sendMessageTelegramImpl = sendMessageTelegramImported;
666767-type RichRawTextTestApi = Bot["api"] & {
68+type RichSendCallParams = {
69+rich_message?: { markdown?: string; html?: string };
70+reply_markup?: unknown;
71+};
72+73+type RichRawTextTestApi = Omit<TelegramApiOverride, "raw" | "sendMessage"> & {
6874raw?: {
6975sendRichMessage?: (params: {
7076chat_id: number | string;
@@ -85,26 +91,30 @@ function richTextForTest(richMessage: { markdown?: string; html?: string }): str
8591 : (richMessage.html ?? "");
8692}
879388-function withRichRawTextTestApi(api: Bot["api"] | undefined): Bot["api"] | undefined {
94+function richSendCallParams(): RichSendCallParams[] {
95+return botRawApi.sendRichMessage.mock.calls.map(([params]) => params);
96+}
97+98+function withRichRawTextTestApi(
99+api: TelegramApiOverride | undefined,
100+): TelegramApiOverride | undefined {
89101if (!api) {
90102return undefined;
91103}
92104const textApi = api as RichRawTextTestApi;
93105if (textApi.raw?.sendRichMessage || !textApi.sendMessage) {
94106return api;
95107}
96-return {
97- ...textApi,
98-raw: {
99- ...textApi.raw,
100-sendRichMessage: async ({ chat_id, rich_message, ...params }) =>
101-await textApi.sendMessage?.(chat_id, richTextForTest(rich_message), {
102-parse_mode: "HTML",
103- ...(rich_message.skip_entity_detection === true ? { skip_entity_detection: true } : {}),
104- ...params,
105-}),
106-},
107-} as Bot["api"];
108+textApi.raw = {
109+ ...textApi.raw,
110+sendRichMessage: async ({ chat_id, rich_message, ...params }) =>
111+await textApi.sendMessage?.(chat_id, richTextForTest(rich_message), {
112+parse_mode: "HTML",
113+ ...(rich_message.skip_entity_detection === true ? { skip_entity_detection: true } : {}),
114+ ...params,
115+}),
116+};
117+return api;
108118}
109119110120const sendMessageTelegram: typeof sendMessageTelegramImpl = async (to, text, opts) =>
@@ -1060,9 +1070,7 @@ describe("sendMessageTelegram", () => {
10601070});
1061107110621072expect(botRawApi.sendRichMessage.mock.calls.length).toBeGreaterThan(1);
1063-const chunks = botRawApi.sendRichMessage.mock.calls.map(
1064-([params]: [{ rich_message?: { markdown?: string } }]) => params.rich_message?.markdown ?? "",
1065-);
1073+const chunks = richSendCallParams().map((params) => params.rich_message?.markdown ?? "");
10661074const joinedChunks = chunks.join("\n");
10671075expect(joinedChunks.startsWith("# Long")).toBe(true);
10681076expect(joinedChunks.match(/\*\*section\*\* with _style_ and `code`/g)?.length).toBe(3000);
@@ -1078,9 +1086,7 @@ describe("sendMessageTelegram", () => {
10781086token: "tok",
10791087});
108010881081-const chunks = botRawApi.sendRichMessage.mock.calls.map(
1082-([params]: [{ rich_message?: { markdown?: string; html?: string } }]) => params.rich_message,
1083-);
1089+const chunks = richSendCallParams().map((params) => params.rich_message);
10841090expect(chunks.length).toBeGreaterThan(1);
10851091expect(chunks.every((chunk) => chunk?.html === undefined)).toBe(true);
10861092expect(chunks.every((chunk) => (chunk?.markdown ?? "").length <= 32_768)).toBe(true);
@@ -1098,10 +1104,7 @@ describe("sendMessageTelegram", () => {
10981104token: "tok",
10991105});
110011061101-const chunks = botRawApi.sendRichMessage.mock.calls.map(
1102-([params]: [{ rich_message?: { markdown?: string; html?: string } }]) =>
1103-params.rich_message?.markdown ?? "",
1104-);
1107+const chunks = richSendCallParams().map((params) => params.rich_message?.markdown ?? "");
11051108expect(chunks).toHaveLength(2);
11061109expect(
11071110chunks.every(
@@ -1120,10 +1123,7 @@ describe("sendMessageTelegram", () => {
11201123token: "tok",
11211124});
112211251123-const chunks = botRawApi.sendRichMessage.mock.calls.map(
1124-([params]: [{ rich_message?: { markdown?: string; html?: string } }]) =>
1125-params.rich_message?.markdown ?? "",
1126-);
1126+const chunks = richSendCallParams().map((params) => params.rich_message?.markdown ?? "");
11271127expect(chunks).toHaveLength(2);
11281128expect(chunks.at(0)?.match(/^# /gm)).toHaveLength(500);
11291129expect(chunks.at(1)?.match(/^# /gm)).toHaveLength(100);
@@ -1212,10 +1212,7 @@ describe("sendMessageTelegram", () => {
12121212token: "tok",
12131213});
121412141215-const chunks = botRawApi.sendRichMessage.mock.calls.map(
1216-([params]: [{ rich_message?: { markdown?: string; html?: string } }]) =>
1217-params.rich_message?.markdown ?? "",
1218-);
1215+const chunks = richSendCallParams().map((params) => params.rich_message?.markdown ?? "");
12191216expect(chunks.length).toBeGreaterThan(1);
12201217expect(chunks.every((chunk) => chunk.length <= 32_768)).toBe(true);
12211218expect(chunks.every((chunk) => chunk.startsWith("~~~ts\n"))).toBe(true);
@@ -1234,9 +1231,7 @@ describe("sendMessageTelegram", () => {
12341231});
1235123212361233expect(botRawApi.sendRichMessage.mock.calls.length).toBeGreaterThan(1);
1237-const calls = botRawApi.sendRichMessage.mock.calls.map(
1238-([params]: [{ rich_message?: { html?: string }; reply_markup?: unknown }]) => params,
1239-);
1234+const calls = richSendCallParams();
12401235expect(calls.every((params) => (params.rich_message?.html ?? "").length <= 32_768)).toBe(true);
12411236expect(calls.at(0)?.rich_message?.html).toMatch(/^<b>A/);
12421237expect(calls.at(-1)?.rich_message?.html).toMatch(/A<\/b>$/);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。