























@@ -18,6 +18,34 @@ vi.mock("./channel.runtime.js", () => ({
1818sendZaloText: sendZaloTextMock,
1919}));
202021+type ZaloOutbound = NonNullable<typeof zaloPlugin.outbound>;
22+type ZaloSendPayload = NonNullable<ZaloOutbound["sendPayload"]>;
23+type ZaloMessageSender = NonNullable<typeof zaloMessageAdapter.send>;
24+25+function requireZaloSendPayload(): ZaloSendPayload {
26+const sendPayload = zaloPlugin.outbound?.sendPayload;
27+if (!sendPayload) {
28+throw new Error("Expected Zalo outbound sendPayload");
29+}
30+return sendPayload;
31+}
32+33+function requireZaloTextSender(): NonNullable<ZaloMessageSender["text"]> {
34+const text = zaloMessageAdapter.send?.text;
35+if (!text) {
36+throw new Error("Expected Zalo message adapter text sender");
37+}
38+return text;
39+}
40+41+function requireZaloMediaSender(): NonNullable<ZaloMessageSender["media"]> {
42+const media = zaloMessageAdapter.send?.media;
43+if (!media) {
44+throw new Error("Expected Zalo message adapter media sender");
45+}
46+return media;
47+}
48+2149function createZaloHarness(params: OutboundPayloadHarnessParams) {
2250const sendZalo = vi.fn();
2351primeChannelOutboundSendMock(sendZalo, { ok: true, messageId: "zl-1" }, params.sendResults);
@@ -33,8 +61,9 @@ function createZaloHarness(params: OutboundPayloadHarnessParams) {
3361text: "",
3462payload: params.payload,
3563};
64+const sendPayload = requireZaloSendPayload();
3665return {
37-run: async () => await zaloPlugin.outbound!.sendPayload!(ctx),
66+run: async () => await sendPayload(ctx),
3867sendMock: sendZalo,
3968to: ctx.to,
4069};
@@ -67,31 +96,33 @@ describe("Zalo outbound payload contract", () => {
6796}),
6897},
6998);
99+const sendText = requireZaloTextSender();
100+const sendMedia = requireZaloMediaSender();
7010171102await expect(
72103verifyChannelMessageAdapterCapabilityProofs({
73104adapterName: "zalo",
74105adapter: zaloMessageAdapter,
75106proofs: {
76107text: async () => {
77-const result = await zaloMessageAdapter.send?.text?.({
108+const result = await sendText({
78109cfg: {},
79110to: "123456789",
80111text: "hello",
81112});
82-expect(result?.receipt.platformMessageIds).toEqual(["zl-text-1"]);
113+expect(result.receipt.platformMessageIds).toEqual(["zl-text-1"]);
83114},
84115media: async () => {
85-const result = await zaloMessageAdapter.send?.media?.({
116+const result = await sendMedia({
86117cfg: {},
87118to: "123456789",
88119text: "image",
89120mediaUrl: "https://example.com/image.png",
90121});
91-expect(result?.receipt.platformMessageIds).toEqual(["zl-media-1"]);
122+expect(result.receipt.platformMessageIds).toEqual(["zl-media-1"]);
92123},
93124messageSendingHooks: () => {
94-expect(zaloMessageAdapter.send?.text).toBeTypeOf("function");
125+expect(sendText).toBeTypeOf("function");
95126},
96127},
97128}),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。