


























@@ -9,6 +9,7 @@ vi.mock("./slash-commands.runtime.js", () => {
99const reportLongCommand = { key: "reportlong", nativeName: "reportlong" };
1010const reportLongButtonCommand = { key: "reportlongbutton", nativeName: "reportlongbutton" };
1111const reportHugeButtonCommand = { key: "reporthugebutton", nativeName: "reporthugebutton" };
12+const reportHugeValueCommand = { key: "reporthugevalue", nativeName: "reporthugevalue" };
1213const unsafeConfirmCommand = { key: "unsafeconfirm", nativeName: "unsafeconfirm" };
1314const longConfirmCommand = { key: "longconfirm", nativeName: "longconfirm" };
1415const statusAliasCommand = { key: "status", nativeName: "status" };
@@ -80,6 +81,9 @@ vi.mock("./slash-commands.runtime.js", () => {
8081if (normalized === "reporthugebutton") {
8182return reportHugeButtonCommand;
8283}
84+if (normalized === "reporthugevalue") {
85+return reportHugeValueCommand;
86+}
8387if (normalized === "unsafeconfirm") {
8488return unsafeConfirmCommand;
8589}
@@ -134,6 +138,12 @@ vi.mock("./slash-commands.runtime.js", () => {
134138acceptsArgs: true,
135139args: [],
136140},
141+{
142+name: "reporthugevalue",
143+description: "ReportHugeValue",
144+acceptsArgs: true,
145+args: [],
146+},
137147{
138148name: "unsafeconfirm",
139149description: "UnsafeConfirm",
@@ -187,6 +197,12 @@ vi.mock("./slash-commands.runtime.js", () => {
187197})),
188198);
189199}
200+if (params.command?.key === "reporthugevalue") {
201+return resolvePeriodMenu(params, [
202+{ value: "valid", label: "Valid" },
203+{ value: "x".repeat(2500), label: "Overlong" },
204+]);
205+}
190206if (params.command?.key === "reportcompact") {
191207return resolvePeriodMenu(params, baseReportPeriodChoices);
192208}
@@ -466,6 +482,7 @@ describe("Slack native command argument menus", () => {
466482let reportLongHandler: (args: unknown) => Promise<void>;
467483let reportLongButtonHandler: (args: unknown) => Promise<void>;
468484let reportHugeButtonHandler: (args: unknown) => Promise<void>;
485+let reportHugeValueHandler: (args: unknown) => Promise<void>;
469486let unsafeConfirmHandler: (args: unknown) => Promise<void>;
470487let longConfirmHandler: (args: unknown) => Promise<void>;
471488let agentStatusHandler: (args: unknown) => Promise<void>;
@@ -490,6 +507,11 @@ describe("Slack native command argument menus", () => {
490507"/reporthugebutton",
491508"/reporthugebutton",
492509);
510+reportHugeValueHandler = requireHandler(
511+harness.commands,
512+"/reporthugevalue",
513+"/reporthugevalue",
514+);
493515unsafeConfirmHandler = requireHandler(harness.commands, "/unsafeconfirm", "/unsafeconfirm");
494516longConfirmHandler = requireHandler(harness.commands, "/longconfirm", "/longconfirm");
495517agentStatusHandler = requireHandler(harness.commands, "/agentstatus", "/agentstatus");
@@ -638,6 +660,24 @@ describe("Slack native command argument menus", () => {
638660expect(actionBlocks.at(-1)?.elements).toHaveLength(5);
639661});
640662663+it("drops fallback buttons whose encoded values exceed Slack's button value limit", async () => {
664+const { respond } = await runCommandHandler(reportHugeValueHandler);
665+expect(respond).toHaveBeenCalledTimes(1);
666+const payload = respond.mock.calls[0]?.[0] as {
667+blocks?: Array<{
668+type: string;
669+elements?: Array<{ text?: { text?: string }; value?: string }>;
670+}>;
671+};
672+const actionBlocks = (payload.blocks ?? []).filter((block) => block.type === "actions");
673+expect(actionBlocks).toHaveLength(1);
674+expect(actionBlocks[0]?.elements).toHaveLength(1);
675+expect(actionBlocks[0]?.elements?.[0]).toMatchObject({
676+text: { text: "Valid" },
677+});
678+expect(actionBlocks[0]?.elements?.[0]?.value?.length).toBeLessThanOrEqual(2000);
679+});
680+641681it("shows an overflow menu when choices fit compact range", async () => {
642682const element = await getFirstActionElementFromCommand(reportCompactHandler);
643683expect(element?.type).toBe("overflow");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。