

























@@ -60,6 +60,15 @@ function cfg(actions?: Record<string, boolean | undefined>): OpenClawConfig {
6060} as OpenClawConfig;
6161}
626263+function imsgOptions(chatGuid = "") {
64+return {
65+cliPath: "imsg",
66+dbPath: "/tmp/messages.db",
67+timeoutMs: undefined,
68+ chatGuid,
69+};
70+}
71+6372describe("imessage message actions", () => {
6473beforeEach(() => {
6574runtimeMock.resolveIMessageMessageId.mockClear();
@@ -227,16 +236,18 @@ describe("imessage message actions", () => {
227236},
228237} as never);
229238230-expect(runtimeMock.sendReaction).toHaveBeenCalledWith(
231-expect.objectContaining({
232-chatGuid: "iMessage;+;chat0000",
233-messageId: "message-guid",
234-reaction: "like",
235-options: expect.objectContaining({
236-dbPath: "/tmp/messages.db",
237-}),
238-}),
239-);
239+expect(runtimeMock.sendReaction.mock.calls).toStrictEqual([
240+[
241+{
242+chatGuid: "iMessage;+;chat0000",
243+messageId: "message-guid",
244+reaction: "like",
245+remove: undefined,
246+partIndex: undefined,
247+options: imsgOptions("iMessage;+;chat0000"),
248+},
249+],
250+]);
240251});
241252242253it("resolves chat_id targets before invoking bridge actions", async () => {
@@ -258,16 +269,26 @@ describe("imessage message actions", () => {
258269},
259270} as never);
260271261-expect(runtimeMock.resolveChatGuidForTarget).toHaveBeenCalledWith(
262-expect.objectContaining({
263-target: { kind: "chat_id", chatId: 42 },
264-}),
265-);
266-expect(runtimeMock.sendReaction).toHaveBeenCalledWith(
267-expect.objectContaining({
268-chatGuid: "iMessage;+;resolved",
269-}),
270-);
272+expect(runtimeMock.resolveChatGuidForTarget.mock.calls).toStrictEqual([
273+[
274+{
275+target: { kind: "chat_id", chatId: 42 },
276+options: imsgOptions(),
277+},
278+],
279+]);
280+expect(runtimeMock.sendReaction.mock.calls).toStrictEqual([
281+[
282+{
283+chatGuid: "iMessage;+;resolved",
284+messageId: "message-guid",
285+reaction: "like",
286+remove: undefined,
287+partIndex: undefined,
288+options: imsgOptions("iMessage;+;resolved"),
289+},
290+],
291+]);
271292});
272293273294it("resolves short message ids before invoking bridge actions", async () => {
@@ -297,11 +318,18 @@ describe("imessage message actions", () => {
297318chatId: undefined,
298319},
299320});
300-expect(runtimeMock.sendReaction).toHaveBeenCalledWith(
301-expect.objectContaining({
302-messageId: "full-guid",
303-}),
304-);
321+expect(runtimeMock.sendReaction.mock.calls).toStrictEqual([
322+[
323+{
324+chatGuid: "iMessage;+;chat0000",
325+messageId: "full-guid",
326+reaction: "like",
327+remove: undefined,
328+partIndex: undefined,
329+options: imsgOptions("iMessage;+;chat0000"),
330+},
331+],
332+]);
305333});
306334307335it("resolves chat_identifier targets before invoking bridge actions", async () => {
@@ -323,16 +351,26 @@ describe("imessage message actions", () => {
323351},
324352} as never);
325353326-expect(runtimeMock.resolveChatGuidForTarget).toHaveBeenCalledWith(
327-expect.objectContaining({
328-target: { kind: "chat_identifier", chatIdentifier: "team-thread" },
329-}),
330-);
331-expect(runtimeMock.sendRichMessage).toHaveBeenCalledWith(
332-expect.objectContaining({
333-chatGuid: "iMessage;+;resolved-ident",
334-}),
335-);
354+expect(runtimeMock.resolveChatGuidForTarget.mock.calls).toStrictEqual([
355+[
356+{
357+target: { kind: "chat_identifier", chatIdentifier: "team-thread" },
358+options: imsgOptions(),
359+},
360+],
361+]);
362+expect(runtimeMock.sendRichMessage.mock.calls).toStrictEqual([
363+[
364+{
365+chatGuid: "iMessage;+;resolved-ident",
366+text: "reply",
367+replyToMessageId: "message-guid",
368+partIndex: undefined,
369+attachment: undefined,
370+options: imsgOptions("iMessage;+;resolved-ident"),
371+},
372+],
373+]);
336374});
337375338376describe("reply with attachment (openclaw/imsg#114 plumbing)", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。