




















@@ -103,20 +103,50 @@ describe("Ghost reminder bug (issue #13317)", () => {
103103} | null,
104104reminderText: string,
105105) => {
106-expect(calledCtx).toEqual(
107-expect.objectContaining({
108-Provider: "cron-event",
109-Body: expect.stringContaining("scheduled reminder has been triggered"),
110-}),
111-);
106+expect(calledCtx?.Provider).toBe("cron-event");
112107if (calledCtx === null || typeof calledCtx.Body !== "string") {
113108throw new Error("Expected cron event prompt body");
114109}
110+expect(calledCtx.Body).toContain("scheduled reminder has been triggered");
115111expect(calledCtx.Body).toContain(reminderText);
116112expect(calledCtx.Body).not.toContain("HEARTBEAT_OK");
117113expect(calledCtx.Body).not.toContain("heartbeat poll");
118114};
119115116+const getFirstReplyContext = (
117+replySpy: ReturnType<typeof vi.fn>,
118+): {
119+SessionKey?: string;
120+MessageThreadId?: number;
121+Body?: string;
122+} => {
123+const ctx = replySpy.mock.calls[0]?.[0];
124+expect(typeof ctx).toBe("object");
125+expect(ctx).not.toBeNull();
126+return ctx as {
127+SessionKey?: string;
128+MessageThreadId?: number;
129+Body?: string;
130+};
131+};
132+133+const expectTelegramSend = (
134+sendTelegram: ReturnType<typeof vi.fn>,
135+params: {
136+to: string;
137+text: string;
138+messageThreadId?: number;
139+},
140+) => {
141+expect(sendTelegram).toHaveBeenCalledTimes(1);
142+const [to, text, options] = sendTelegram.mock.calls[0] ?? [];
143+expect(to).toBe(params.to);
144+expect(text).toBe(params.text);
145+expect((options as { messageThreadId?: number } | undefined)?.messageThreadId).toBe(
146+params.messageThreadId,
147+);
148+};
149+120150const runCronReminderCase = async (
121151tmpPrefix: string,
122152enqueue: (sessionKey: string) => void,
@@ -527,12 +557,11 @@ describe("Ghost reminder bug (issue #13317)", () => {
527557});
528558529559expect(result.status).toBe("ran");
530-expect(sendTelegram).toHaveBeenCalledTimes(1);
531-expect(sendTelegram).toHaveBeenCalledWith(
532-"-100155462274",
533-"Restart complete",
534-expect.objectContaining({ messageThreadId: 42 }),
535-);
560+expectTelegramSend(sendTelegram, {
561+to: "-100155462274",
562+text: "Restart complete",
563+messageThreadId: 42,
564+});
536565});
537566});
538567@@ -569,13 +598,7 @@ describe("Ghost reminder bug (issue #13317)", () => {
569598});
570599571600expect(result.status).toBe("ran");
572-expect(replySpy).toHaveBeenCalledWith(
573-expect.objectContaining({
574-SessionKey: `${sessionKey}:heartbeat`,
575-}),
576-expect.anything(),
577-expect.anything(),
578-);
601+expect(getFirstReplyContext(replySpy).SessionKey).toBe(`${sessionKey}:heartbeat`);
579602expect(sendTelegram).toHaveBeenCalledTimes(1);
580603expect(sendTelegram.mock.calls[0]?.[0]).toBe("-100155462274");
581604const options = sendTelegram.mock.calls[0]?.[2] as { messageThreadId?: number } | undefined;
@@ -640,12 +663,11 @@ describe("Ghost reminder bug (issue #13317)", () => {
640663});
641664642665expect(result.status).toBe("ran");
643-expect(sendTelegram).toHaveBeenCalledTimes(1);
644-expect(sendTelegram).toHaveBeenCalledWith(
645-"telegram:-1003774691294:topic:47",
646-"The review-worker spawn finished successfully.",
647-expect.objectContaining({ messageThreadId: 47 }),
648-);
666+expectTelegramSend(sendTelegram, {
667+to: "telegram:-1003774691294:topic:47",
668+text: "The review-worker spawn finished successfully.",
669+messageThreadId: 47,
670+});
649671});
650672});
651673@@ -704,13 +726,7 @@ describe("Ghost reminder bug (issue #13317)", () => {
704726});
705727706728expect(result.status).toBe("ran");
707-expect(getReplySpy).toHaveBeenCalledWith(
708-expect.objectContaining({
709-Body: expect.stringContaining("no command output was found"),
710-}),
711-expect.anything(),
712-expect.anything(),
713-);
729+expect(getFirstReplyContext(getReplySpy).Body).toContain("no command output was found");
714730expect(sendTelegram).not.toHaveBeenCalled();
715731});
716732});
@@ -746,20 +762,14 @@ describe("Ghost reminder bug (issue #13317)", () => {
746762});
747763748764expect(result.status).toBe("ran");
749-expect(replySpy).toHaveBeenCalledWith(
750-expect.objectContaining({
751-SessionKey: `${sessionKey}:heartbeat`,
752-MessageThreadId: 42,
753-}),
754-expect.anything(),
755-expect.anything(),
756-);
757-expect(sendTelegram).toHaveBeenCalledTimes(1);
758-expect(sendTelegram).toHaveBeenCalledWith(
759-"-100155462274",
760-"Topic heartbeat",
761-expect.objectContaining({ messageThreadId: 42 }),
762-);
765+const replyCtx = getFirstReplyContext(replySpy);
766+expect(replyCtx.SessionKey).toBe(`${sessionKey}:heartbeat`);
767+expect(replyCtx.MessageThreadId).toBe(42);
768+expectTelegramSend(sendTelegram, {
769+to: "-100155462274",
770+text: "Topic heartbeat",
771+messageThreadId: 42,
772+});
763773});
764774});
765775});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。