




























@@ -5,12 +5,33 @@ type SlackPayload = {
55text: string;
66blocks?: unknown;
77};
8+type ChatUpdatePayload = {
9+channel?: string;
10+ts?: string;
11+text?: string;
12+blocks?: unknown;
13+};
814const SLACK_CHAT_UPDATE_TEXT_LIMIT = 4000;
9151016function findSlackActionsBlock(blocks: Array<{ type?: string; elements?: unknown[] }>) {
1117return blocks.find((block) => block.type === "actions");
1218}
131920+function readChatUpdatePayload(
21+chatUpdate: { mock: { calls: unknown[][] } },
22+index: number,
23+): ChatUpdatePayload {
24+const call = chatUpdate.mock.calls[index];
25+if (!call) {
26+throw new Error(`Expected Slack chat.update call #${index + 1}`);
27+}
28+const [payload] = call;
29+if (!payload || typeof payload !== "object") {
30+throw new Error(`Expected Slack chat.update payload #${index + 1}`);
31+}
32+return payload as ChatUpdatePayload;
33+}
34+1435describe("slackApprovalNativeRuntime", () => {
1536it("renders only the allowed pending actions", async () => {
1637const payload = (await slackApprovalNativeRuntime.presentation.buildPendingPayload({
@@ -167,21 +188,17 @@ describe("slackApprovalNativeRuntime", () => {
167188phase: "resolved",
168189});
169190170-const firstUpdate = chatUpdate.mock.calls[0]?.[0] as
171-| { channel?: string; ts?: string; text?: string; blocks?: unknown }
172-| undefined;
173-const secondUpdate = chatUpdate.mock.calls[1]?.[0] as
174-| { channel?: string; ts?: string; text?: string; blocks?: unknown }
175-| undefined;
176-expect(firstUpdate?.channel).toBe("C123");
177-expect(firstUpdate?.ts).toBe("1712345678.999999");
178-expect(firstUpdate?.text).toBe("a".repeat(SLACK_CHAT_UPDATE_TEXT_LIMIT));
179-expect(firstUpdate?.blocks).toBe(blocks);
180-expect(secondUpdate?.channel).toBe("C123");
181-expect(secondUpdate?.ts).toBe("1712345678.999999");
182-expect(secondUpdate?.text).toMatch(/…$/);
183-expect(secondUpdate?.blocks).toBe(blocks);
184-expect(chatUpdate.mock.calls[1]?.[0].text).toHaveLength(SLACK_CHAT_UPDATE_TEXT_LIMIT);
191+const firstUpdate = readChatUpdatePayload(chatUpdate, 0);
192+const secondUpdate = readChatUpdatePayload(chatUpdate, 1);
193+expect(firstUpdate.channel).toBe("C123");
194+expect(firstUpdate.ts).toBe("1712345678.999999");
195+expect(firstUpdate.text).toBe("a".repeat(SLACK_CHAT_UPDATE_TEXT_LIMIT));
196+expect(firstUpdate.blocks).toBe(blocks);
197+expect(secondUpdate.channel).toBe("C123");
198+expect(secondUpdate.ts).toBe("1712345678.999999");
199+expect(secondUpdate.text).toMatch(/…$/);
200+expect(secondUpdate.blocks).toBe(blocks);
201+expect(secondUpdate.text).toHaveLength(SLACK_CHAT_UPDATE_TEXT_LIMIT);
185202});
186203187204it("keeps pending metadata context within Slack Block Kit limits", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。