
























@@ -188,35 +188,23 @@ describe("openclaw channel mcp server", () => {
188188});
189189attachReadyGateway(bridge, gatewayRequest);
190190191-await expect(bridge.listConversations()).resolves.toEqual(
192-expect.arrayContaining([
193-expect.objectContaining({
194- sessionKey,
195-channel: "telegram",
196-to: "-100123",
197-accountId: "acct-1",
198-threadId: 42,
199-}),
200-]),
201-);
191+const conversations = await bridge.listConversations();
192+expect(conversations).toHaveLength(1);
193+expect(conversations[0]?.sessionKey).toBe(sessionKey);
194+expect(conversations[0]?.channel).toBe("telegram");
195+expect(conversations[0]?.to).toBe("-100123");
196+expect(conversations[0]?.accountId).toBe("acct-1");
197+expect(conversations[0]?.threadId).toBe(42);
202198203199const messages = await bridge.readMessages(sessionKey, 5);
204-expect(messages[0]).toMatchObject({
205-role: "assistant",
206-content: [{ type: "text", text: "hello from transcript" }],
207-});
208-expect(messages[1]).toMatchObject({
209-__openclaw: {
210-id: "msg-attachment",
211-},
212-});
213-expect(extractAttachmentsFromMessage(messages[1])).toEqual(
214-expect.arrayContaining([
215-expect.objectContaining({
216-type: "image",
217-}),
218-]),
219-);
200+expect(messages[0]?.role).toBe("assistant");
201+expect(messages[0]?.content).toEqual([{ type: "text", text: "hello from transcript" }]);
202+expect((messages[1]?.__openclaw as { id?: string } | undefined)?.id).toBe("msg-attachment");
203+expect(
204+extractAttachmentsFromMessage(messages[1]).some(
205+(entry) => (entry as { type?: unknown }).type === "image",
206+),
207+).toBe(true);
220208});
221209222210test("serializes conversation and message payloads into MCP primary content", async () => {
@@ -306,15 +294,11 @@ describe("openclaw channel mcp server", () => {
306294307295await flushMcpNotifications();
308296expect(channelNotifications).toHaveLength(1);
309-expect(channelNotifications[0]).toMatchObject({
310-content: "hello Claude",
311-meta: expect.objectContaining({
312-session_key: sessionKey,
313-channel: "imessage",
314-to: "+15551234567",
315-message_id: "msg-user-1",
316-}),
317-});
297+expect(channelNotifications[0]?.content).toBe("hello Claude");
298+expect(channelNotifications[0]?.meta.session_key).toBe(sessionKey);
299+expect(channelNotifications[0]?.meta.channel).toBe("imessage");
300+expect(channelNotifications[0]?.meta.to).toBe("+15551234567");
301+expect(channelNotifications[0]?.meta.message_id).toBe("msg-user-1");
318302319303await mcp.client.notification({
320304method: "notifications/claude/channel/permission_request",
@@ -367,13 +351,9 @@ describe("openclaw channel mcp server", () => {
367351368352await flushMcpNotifications();
369353expect(channelNotifications).toHaveLength(2);
370-expect(channelNotifications[1]).toMatchObject({
371-content: "plain string user turn",
372-meta: expect.objectContaining({
373-session_key: sessionKey,
374-message_id: "msg-user-3",
375-}),
376-});
354+expect(channelNotifications[1]?.content).toBe("plain string user turn");
355+expect(channelNotifications[1]?.meta.session_key).toBe(sessionKey);
356+expect(channelNotifications[1]?.meta.message_id).toBe("msg-user-3");
377357} finally {
378358await mcp?.close();
379359}
@@ -402,17 +382,16 @@ describe("openclaw channel mcp server", () => {
402382text: "reply from mcp",
403383});
404384405-expect(gatewayRequest).toHaveBeenCalledWith(
406-"send",
407-expect.objectContaining({
408-to: "-100123",
409-channel: "telegram",
410-accountId: "acct-1",
411-threadId: "42",
412-sessionKey: "agent:main:main",
413-message: "reply from mcp",
414-}),
415-);
385+expect(gatewayRequest).toHaveBeenCalledTimes(1);
386+const [method, payload] = gatewayRequest.mock.calls[0] ?? [];
387+expect(method).toBe("send");
388+const sendPayload = payload as Record<string, unknown>;
389+expect(sendPayload.to).toBe("-100123");
390+expect(sendPayload.channel).toBe("telegram");
391+expect(sendPayload.accountId).toBe("acct-1");
392+expect(sendPayload.threadId).toBe("42");
393+expect(sendPayload.sessionKey).toBe("agent:main:main");
394+expect(sendPayload.message).toBe("reply from mcp");
416395});
417396418397test("gets one conversation through sessions.describe without broad listing", async () => {
@@ -439,15 +418,12 @@ describe("openclaw channel mcp server", () => {
439418440419attachReadyGateway(bridge, gatewayRequest);
441420442-await expect(bridge.getConversation("agent:main:main")).resolves.toEqual(
443-expect.objectContaining({
444-sessionKey: "agent:main:main",
445-channel: "telegram",
446-to: "-100123",
447-accountId: "acct-1",
448-lastMessagePreview: "latest message",
449-}),
450-);
421+const conversation = await bridge.getConversation("agent:main:main");
422+expect(conversation?.sessionKey).toBe("agent:main:main");
423+expect(conversation?.channel).toBe("telegram");
424+expect(conversation?.to).toBe("-100123");
425+expect(conversation?.accountId).toBe("acct-1");
426+expect(conversation?.lastMessagePreview).toBe("latest message");
451427expect(gatewayRequest).toHaveBeenCalledWith("sessions.describe", {
452428key: "agent:main:main",
453429includeDerivedTitles: true,
@@ -483,20 +459,16 @@ describe("openclaw channel mcp server", () => {
483459484460attachReadyGateway(bridge, gatewayRequest);
485461486-await expect(bridge.listConversations()).resolves.toEqual([
487-expect.objectContaining({
488-sessionKey: "agent:main:channel-field",
489-channel: "telegram",
490-to: "-100111",
491-}),
492-expect.objectContaining({
493-sessionKey: "agent:main:origin-field",
494-channel: "imessage",
495-to: "+15551230000",
496-accountId: "imessage-default",
497-threadId: "thread-7",
498-}),
499-]);
462+const conversations = await bridge.listConversations();
463+expect(conversations).toHaveLength(2);
464+expect(conversations[0]?.sessionKey).toBe("agent:main:channel-field");
465+expect(conversations[0]?.channel).toBe("telegram");
466+expect(conversations[0]?.to).toBe("-100111");
467+expect(conversations[1]?.sessionKey).toBe("agent:main:origin-field");
468+expect(conversations[1]?.channel).toBe("imessage");
469+expect(conversations[1]?.to).toBe("+15551230000");
470+expect(conversations[1]?.accountId).toBe("imessage-default");
471+expect(conversations[1]?.threadId).toBe("thread-7");
500472});
501473502474test("swallows notification send errors after channel replies are matched", async () => {
@@ -567,13 +539,11 @@ describe("openclaw channel mcp server", () => {
567539})) as {
568540structuredContent?: { event?: Record<string, unknown> };
569541};
570-expect(waited.structuredContent?.event).toMatchObject({
571-type: "message",
572-sessionKey: "agent:main:main",
573-messageId: "msg-2",
574-role: "user",
575-text: "inbound live message",
576-});
542+expect(waited.structuredContent?.event?.type).toBe("message");
543+expect(waited.structuredContent?.event?.sessionKey).toBe("agent:main:main");
544+expect(waited.structuredContent?.event?.messageId).toBe("msg-2");
545+expect(waited.structuredContent?.event?.role).toBe("user");
546+expect(waited.structuredContent?.event?.text).toBe("inbound live message");
577547} finally {
578548await mcp.close();
579549}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。