From a67507eb04dfb636a9dab89bdf764e160853dff8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 21:25:26 +0100 Subject: [PATCH] test: guard chat extension null helpers --- .../imessage/src/monitor/catchup.test.ts | 10 +++++---- .../dispatch.preview-fallback.test.ts | 2 -- .../monitor/message-handler/prepare.test.ts | 1 - .../monitor/inbound-dispatch.test.ts | 2 -- .../whatsapp/src/inbound/send-api.test.ts | 21 ++++++++----------- 5 files changed, 15 insertions(+), 21 deletions(-) diff --git a/extensions/imessage/src/monitor/catchup.test.ts b/extensions/imessage/src/monitor/catchup.test.ts index c64a3ce0bae..0dfd8d0a0d3 100644 --- a/extensions/imessage/src/monitor/catchup.test.ts +++ b/extensions/imessage/src/monitor/catchup.test.ts @@ -85,10 +85,12 @@ describe("loadIMessageCatchupCursor / saveIMessageCatchupCursor", () => { lastSeenRowid: 42, }); const cursor = await loadIMessageCatchupCursor("primary"); - expect(cursor).not.toBeNull(); - expect(cursor?.lastSeenMs).toBe(1_700_000_000_000); - expect(cursor?.lastSeenRowid).toBe(42); - expect(cursor?.failureRetries).toBeUndefined(); + if (!cursor) { + throw new Error("expected iMessage catchup cursor"); + } + expect(cursor.lastSeenMs).toBe(1_700_000_000_000); + expect(cursor.lastSeenRowid).toBe(42); + expect(cursor.failureRetries).toBeUndefined(); }); it("round-trips a cursor with failureRetries", async () => { diff --git a/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts b/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts index 9134f6eb325..8f0bbe6931b 100644 --- a/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts +++ b/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts @@ -124,8 +124,6 @@ function requireCapturedItemEventHandler() { } function requireRecord(value: unknown, label: string): Record { - expect(typeof value).toBe("object"); - expect(value).not.toBeNull(); if (typeof value !== "object" || value === null) { throw new Error(`${label} was not an object`); } diff --git a/extensions/slack/src/monitor/message-handler/prepare.test.ts b/extensions/slack/src/monitor/message-handler/prepare.test.ts index 71265202396..539e6f3cb01 100644 --- a/extensions/slack/src/monitor/message-handler/prepare.test.ts +++ b/extensions/slack/src/monitor/message-handler/prepare.test.ts @@ -2391,7 +2391,6 @@ describe("prepareSlackMessage sender prefix", () => { const result = await prepareSenderPrefixMessage(ctx, "<@BOT> /new", "1700000000.0002"); - expect(result).not.toBeNull(); if (!result) { throw new Error("expected sender prefix message result"); } diff --git a/extensions/whatsapp/src/auto-reply/monitor/inbound-dispatch.test.ts b/extensions/whatsapp/src/auto-reply/monitor/inbound-dispatch.test.ts index 5aa76496d4c..8cac166f0c4 100644 --- a/extensions/whatsapp/src/auto-reply/monitor/inbound-dispatch.test.ts +++ b/extensions/whatsapp/src/auto-reply/monitor/inbound-dispatch.test.ts @@ -199,8 +199,6 @@ function getCapturedReplyOptions() { } function requireRecord(value: unknown, label: string): Record { - expect(typeof value).toBe("object"); - expect(value).not.toBeNull(); if (typeof value !== "object" || value === null) { throw new Error(`${label} was not an object`); } diff --git a/extensions/whatsapp/src/inbound/send-api.test.ts b/extensions/whatsapp/src/inbound/send-api.test.ts index 8206758e1c5..480144db621 100644 --- a/extensions/whatsapp/src/inbound/send-api.test.ts +++ b/extensions/whatsapp/src/inbound/send-api.test.ts @@ -19,6 +19,13 @@ vi.mock("openclaw/plugin-sdk/channel-activity-runtime", async () => { }; }); +function requireRecord(value: unknown, label: string): Record { + if (typeof value !== "object" || value === null) { + throw new Error(`${label} was not an object`); + } + return value as Record; +} + describe("createWebSendApi", () => { const sendMessage = vi.fn( async ( @@ -38,15 +45,6 @@ describe("createWebSendApi", () => { }); }); - function requireRecord(value: unknown, label: string): Record { - expect(typeof value).toBe("object"); - expect(value).not.toBeNull(); - if (typeof value !== "object" || value === null) { - throw new Error(`${label} was not an object`); - } - return value as Record; - } - function expectRecordFields(record: Record, fields: Record) { for (const [key, value] of Object.entries(fields)) { expect(record[key]).toEqual(value); @@ -423,9 +421,8 @@ describe("createWebSendApi LID resolution (issue #67378)", () => { }); await api.sendPoll("+15555550000", { question: "Q?", options: ["a", "b"] }); expect(sendMessage.mock.calls[0]?.[0]).toBe("987654@lid"); - expect(typeof sendMessage.mock.calls[0]?.[1]).toBe("object"); - expect(sendMessage.mock.calls[0]?.[1]).not.toBeNull(); - expect("poll" in (sendMessage.mock.calls[0]?.[1] as Record)).toBe(true); + const payload = requireRecord(sendMessage.mock.calls[0]?.[1], "send poll payload"); + expect("poll" in payload).toBe(true); }); it("resolves PN to LID for sendComposingTo presence", async () => {