From 7c3f447c56747911c8137605c219dbfb2cc6bd2b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 03:19:48 +0100 Subject: [PATCH] test: tighten telegram target writeback assertions --- .../src/target-writeback.test-shared.ts | 106 +++++++++--------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/extensions/telegram/src/target-writeback.test-shared.ts b/extensions/telegram/src/target-writeback.test-shared.ts index 9e43ab3df3f..413591410f6 100644 --- a/extensions/telegram/src/target-writeback.test-shared.ts +++ b/extensions/telegram/src/target-writeback.test-shared.ts @@ -14,6 +14,20 @@ const loadCronStore: AsyncUnknownMock = vi.fn(); const resolveCronStorePath: UnknownMock = vi.fn(); const saveCronStore: AsyncUnknownMock = vi.fn(); +type TelegramConfigWrite = { + channels?: { + telegram?: { + defaultTo?: string; + accounts?: Record; + }; + }; +}; + +type CronStoreWrite = { + version: number; + jobs: Array<{ id: string; delivery: { channel: string; to: string } }>; +}; + vi.mock("openclaw/plugin-sdk/config-mutation", async () => { const actual = await vi.importActual( "openclaw/plugin-sdk/config-mutation", @@ -44,6 +58,24 @@ export function installMaybePersistResolvedTelegramTargetTests(params?: { describe("maybePersistResolvedTelegramTarget", () => { let maybePersistResolvedTelegramTarget: typeof import("./target-writeback.js").maybePersistResolvedTelegramTarget; + function requireWriteConfigCall(index = 0): [TelegramConfigWrite, Record] { + const call = writeConfigFile.mock.calls[index] as + | [TelegramConfigWrite, Record] + | undefined; + if (!call) { + throw new Error(`expected writeConfigFile call #${index + 1}`); + } + return call; + } + + function requireSaveCronStoreCall(index = 0): [string, CronStoreWrite] { + const call = saveCronStore.mock.calls[index] as [string, CronStoreWrite] | undefined; + if (!call) { + throw new Error(`expected saveCronStore call #${index + 1}`); + } + return call; + } + beforeAll(async () => { ({ maybePersistResolvedTelegramTarget } = await import("./target-writeback.js")); }); @@ -138,31 +170,17 @@ export function installMaybePersistResolvedTelegramTargetTests(params?: { }); expect(writeConfigFile).toHaveBeenCalledTimes(1); - expect(writeConfigFile).toHaveBeenCalledWith( - expect.objectContaining({ - channels: { - telegram: { - defaultTo: "-100123", - accounts: { - alerts: { - defaultTo: "-100123", - }, - }, - }, - }, - }), - expect.objectContaining({ expectedConfigPath: "/tmp/openclaw.json" }), - ); + const [writtenConfig, writeOptions] = requireWriteConfigCall(); + expect(writtenConfig.channels?.telegram?.defaultTo).toBe("-100123"); + expect(writtenConfig.channels?.telegram?.accounts?.alerts?.defaultTo).toBe("-100123"); + expect(writeOptions.expectedConfigPath).toBe("/tmp/openclaw.json"); expect(saveCronStore).toHaveBeenCalledTimes(1); - expect(saveCronStore).toHaveBeenCalledWith( - "/tmp/cron/jobs.json", - expect.objectContaining({ - jobs: [ - { id: "a", delivery: { channel: "telegram", to: "-100123" } }, - { id: "b", delivery: { channel: "slack", to: "C123" } }, - ], - }), - ); + const [cronPath, cronStore] = requireSaveCronStoreCall(); + expect(cronPath).toBe("/tmp/cron/jobs.json"); + expect(cronStore.jobs).toEqual([ + { id: "a", delivery: { channel: "telegram", to: "-100123" } }, + { id: "b", delivery: { channel: "slack", to: "C123" } }, + ]); }); it("preserves topic suffix style in writeback target", async () => { @@ -186,16 +204,10 @@ export function installMaybePersistResolvedTelegramTargetTests(params?: { resolvedChatId: "-100123", }); - expect(writeConfigFile).toHaveBeenCalledWith( - expect.objectContaining({ - channels: { - telegram: { - defaultTo: "-100123:topic:9", - }, - }, - }), - expect.any(Object), - ); + expect(writeConfigFile).toHaveBeenCalledTimes(1); + const [writtenConfig, writeOptions] = requireWriteConfigCall(); + expect(writtenConfig.channels?.telegram?.defaultTo).toBe("-100123:topic:9"); + expect(writeOptions).toEqual({}); }); it("matches username targets case-insensitively", async () => { @@ -222,22 +234,16 @@ export function installMaybePersistResolvedTelegramTargetTests(params?: { resolvedChatId: "-100123", }); - expect(writeConfigFile).toHaveBeenCalledWith( - expect.objectContaining({ - channels: { - telegram: { - defaultTo: "-100123", - }, - }, - }), - expect.any(Object), - ); - expect(saveCronStore).toHaveBeenCalledWith( - "/tmp/cron/jobs.json", - expect.objectContaining({ - jobs: [{ id: "a", delivery: { channel: "telegram", to: "-100123" } }], - }), - ); + expect(writeConfigFile).toHaveBeenCalledTimes(1); + const [writtenConfig, writeOptions] = requireWriteConfigCall(); + expect(writtenConfig.channels?.telegram?.defaultTo).toBe("-100123"); + expect(writeOptions).toEqual({}); + expect(saveCronStore).toHaveBeenCalledTimes(1); + const [cronPath, cronStore] = requireSaveCronStoreCall(); + expect(cronPath).toBe("/tmp/cron/jobs.json"); + expect(cronStore.jobs).toEqual([ + { id: "a", delivery: { channel: "telegram", to: "-100123" } }, + ]); }); }); }