


































@@ -31,6 +31,14 @@ export type OutboundPayloadHarnessParams = {
3131sendResults?: SendResultLike[];
3232};
333334+function sendCall(sendMock: Mock, index: number): unknown[] {
35+const call = sendMock.mock.calls[index];
36+if (!call) {
37+throw new Error(`expected send call ${index}`);
38+}
39+return call;
40+}
41+3442export function installChannelOutboundPayloadContractSuite(params: {
3543channel: string;
3644chunking: ChunkingMode;
@@ -49,8 +57,11 @@ export function installChannelOutboundPayloadContractSuite(params: {
4957const result = await run();
50585159expect(sendMock).toHaveBeenCalledTimes(1);
52-expect(sendMock).toHaveBeenCalledWith(to, "hello", expect.any(Object));
53-expect(result).toMatchObject({ channel: params.channel });
60+const call = sendCall(sendMock, 0);
61+expect(call[0]).toBe(to);
62+expect(call[1]).toBe("hello");
63+expect(call[2]).toBeDefined();
64+expect(result.channel).toBe(params.channel);
5465});
55665667it("single media delegates to sendMedia", async () => {
@@ -60,12 +71,11 @@ export function installChannelOutboundPayloadContractSuite(params: {
6071const result = await run();
61726273expect(sendMock).toHaveBeenCalledTimes(1);
63-expect(sendMock).toHaveBeenCalledWith(
64-to,
65-"cap",
66-expect.objectContaining({ mediaUrl: "https://example.com/a.jpg" }),
67-);
68-expect(result).toMatchObject({ channel: params.channel });
74+const call = sendCall(sendMock, 0);
75+expect(call[0]).toBe(to);
76+expect(call[1]).toBe("cap");
77+expect((call[2] as Record<string, unknown>).mediaUrl).toBe("https://example.com/a.jpg");
78+expect(result.channel).toBe(params.channel);
6979});
70807181it("multi-media iterates URLs with caption on first", async () => {
@@ -79,19 +89,16 @@ export function installChannelOutboundPayloadContractSuite(params: {
7989const result = await run();
80908191expect(sendMock).toHaveBeenCalledTimes(2);
82-expect(sendMock).toHaveBeenNthCalledWith(
83-1,
84-to,
85-"caption",
86-expect.objectContaining({ mediaUrl: "https://example.com/1.jpg" }),
87-);
88-expect(sendMock).toHaveBeenNthCalledWith(
89-2,
90-to,
91-"",
92-expect.objectContaining({ mediaUrl: "https://example.com/2.jpg" }),
93-);
94-expect(result).toMatchObject({ channel: params.channel, messageId: "m-2" });
92+const first = sendCall(sendMock, 0);
93+expect(first[0]).toBe(to);
94+expect(first[1]).toBe("caption");
95+expect((first[2] as Record<string, unknown>).mediaUrl).toBe("https://example.com/1.jpg");
96+const second = sendCall(sendMock, 1);
97+expect(second[0]).toBe(to);
98+expect(second[1]).toBe("");
99+expect((second[2] as Record<string, unknown>).mediaUrl).toBe("https://example.com/2.jpg");
100+expect(result.channel).toBe(params.channel);
101+expect(result.messageId).toBe("m-2");
95102});
9610397104it("empty payload returns no-op", async () => {
@@ -109,8 +116,11 @@ export function installChannelOutboundPayloadContractSuite(params: {
109116const result = await run();
110117111118expect(sendMock).toHaveBeenCalledTimes(1);
112-expect(sendMock).toHaveBeenCalledWith(to, text, expect.any(Object));
113-expect(result).toMatchObject({ channel: params.channel });
119+const call = sendCall(sendMock, 0);
120+expect(call[0]).toBe(to);
121+expect(call[1]).toBe(text);
122+expect(call[2]).toBeDefined();
123+expect(result.channel).toBe(params.channel);
114124});
115125return;
116126}
@@ -129,6 +139,6 @@ export function installChannelOutboundPayloadContractSuite(params: {
129139for (const call of sendMock.mock.calls) {
130140expect((call[1] as string).length).toBeLessThanOrEqual(chunking.maxChunkLength);
131141}
132-expect(result).toMatchObject({ channel: params.channel });
142+expect(result.channel).toBe(params.channel);
133143});
134144}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。