
























@@ -452,6 +452,24 @@ function requireRecord(value: unknown, label: string): Record<string, unknown> {
452452return value as Record<string, unknown>;
453453}
454454455+type MockWithCalls = { mock: { calls: unknown[][] } };
456+457+function firstMockCall(mock: MockWithCalls, label: string): unknown[] {
458+const call = mock.mock.calls.at(0);
459+if (!call) {
460+throw new Error(`missing ${label} call`);
461+}
462+return call;
463+}
464+465+function firstMockArg(mock: MockWithCalls, label: string) {
466+return firstMockCall(mock, label)[0];
467+}
468+469+function firstDispatchParams(): DispatchInboundParams {
470+return firstMockArg(dispatchInboundMessage, "dispatchInboundMessage") as DispatchInboundParams;
471+}
472+455473function expectRecordFields(record: Record<string, unknown>, fields: Record<string, unknown>) {
456474for (const [key, value] of Object.entries(fields)) {
457475expect(record[key]).toEqual(value);
@@ -560,10 +578,7 @@ function createMockDraftStreamForTest() {
560578}
561579562580function expectPreviewEditContent(content: string) {
563-const call = editMessageDiscord.mock.calls[0] as unknown[] | undefined;
564-if (!call) {
565-throw new Error("missing preview edit call");
566-}
581+const call = firstMockCall(editMessageDiscord, "preview edit");
567582expect(call[0]).toBe("c1");
568583expect(call[1]).toBe("preview-1");
569584expect(call[2]).toEqual({ content });
@@ -655,11 +670,14 @@ describe("processDiscordMessage ack reactions", () => {
655670656671expect(sendMocks.reactMessageDiscord).toHaveBeenCalled();
657672const feedbackOptions = requireRecord(
658-sendMocks.reactMessageDiscord.mock.calls[0]?.[3],
673+requireReactionCall(sendMocks.reactMessageDiscord, 0)[3],
659674"feedback reaction options",
660675);
661676expect(feedbackOptions.rest).toBe(feedbackRest);
662-const deliveryParams = requireRecord(deliverDiscordReply.mock.calls[0]?.[0], "delivery params");
677+const deliveryParams = requireRecord(
678+firstMockArg(deliverDiscordReply, "deliverDiscordReply"),
679+"delivery params",
680+);
663681expect(deliveryParams.rest).toBe(deliveryRest);
664682expect(feedbackRest).not.toBe(deliveryRest);
665683});
@@ -753,12 +771,10 @@ describe("processDiscordMessage ack reactions", () => {
753771await runProcessDiscordMessage(ctx);
754772await vi.runAllTimersAsync();
755773756-const resolveCall = discordTargetMocks.resolveDiscordTargetChannelId.mock.calls[0] as
757-| unknown[]
758-| undefined;
759-if (!resolveCall) {
760-throw new Error("missing Discord target resolve call");
761-}
774+const resolveCall = firstMockCall(
775+discordTargetMocks.resolveDiscordTargetChannelId,
776+"resolveDiscordTargetChannelId",
777+);
762778expect(resolveCall[0]).toBe("user:u1");
763779expect(requireRecord(resolveCall[1], "Discord target resolve options").accountId).toBe(
764780"default",
@@ -1553,9 +1569,7 @@ describe("processDiscordMessage draft streaming", () => {
15531569await runProcessDiscordMessage(ctx);
1554157015551571expect(draftStream.update).toHaveBeenCalledWith("Hello");
1556-expect(dispatchInboundMessage.mock.calls[0]?.[0]?.replyOptions?.disableBlockStreaming).toBe(
1557-true,
1558-);
1572+expect(firstDispatchParams().replyOptions?.disableBlockStreaming).toBe(true);
15591573});
1560157415611575it("keeps progress label visible when Discord tool progress lines are disabled", async () => {
@@ -1586,10 +1600,8 @@ describe("processDiscordMessage draft streaming", () => {
15861600expect(draftStream.update).toHaveBeenCalledWith("Shelling");
15871601expect(draftStream.flush).toHaveBeenCalledTimes(1);
15881602expect(
1589-requireRecord(
1590-dispatchInboundMessage.mock.calls[0]?.[0]?.replyOptions,
1591-"dispatch reply options",
1592-).suppressDefaultToolProgressMessages,
1603+requireRecord(firstDispatchParams().replyOptions, "dispatch reply options")
1604+.suppressDefaultToolProgressMessages,
15931605).toBe(true);
15941606});
15951607@@ -1879,9 +1891,7 @@ describe("processDiscordMessage draft streaming", () => {
1879189118801892await runProcessDiscordMessage(ctx);
188118931882-expect(
1883-dispatchInboundMessage.mock.calls[0]?.[0]?.replyOptions?.suppressDefaultToolProgressMessages,
1884-).toBe(true);
1894+expect(firstDispatchParams().replyOptions?.suppressDefaultToolProgressMessages).toBe(true);
18851895});
1886189618871897it("strips reply tags from preview partials", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。