




















@@ -79,6 +79,25 @@ type CompletionFixtureParams = {
7979taskLabel: string;
8080};
818182+function requireRecord(value: unknown, label: string): Record<string, unknown> {
83+if (!value || typeof value !== "object" || Array.isArray(value)) {
84+throw new Error(`expected ${label}`);
85+}
86+return value as Record<string, unknown>;
87+}
88+89+function requireMockFirstParam(mock: unknown, label: string): Record<string, unknown> {
90+const first = (mock as { mock?: { calls?: unknown[][] } }).mock?.calls?.[0]?.[0];
91+return requireRecord(first, label);
92+}
93+94+function requireRecordArray(value: unknown, label: string): Record<string, unknown>[] {
95+if (!Array.isArray(value)) {
96+throw new Error(`expected ${label}`);
97+}
98+return value.map((entry, index) => requireRecord(entry, `${label}[${index}]`));
99+}
100+82101export function createMediaCompletionFixture({
83102 directSend,
84103 mediaUrls,
@@ -125,26 +144,26 @@ export function expectQueuedTaskRun({
125144 sourceId,
126145 progressSummary,
127146}: QueuedTaskExpectation): void {
128-expect(taskExecutorMocks.createRunningTaskRun).toHaveBeenCalledWith(
129-expect.objectContaining({
130- taskKind,
131- sourceId,
132- progressSummary,
133-}),
147+const params = requireMockFirstParam(
148+taskExecutorMocks.createRunningTaskRun,
149+"createRunningTaskRun params",
134150);
151+expect(params.taskKind).toBe(taskKind);
152+expect(params.sourceId).toBe(sourceId);
153+expect(params.progressSummary).toBe(progressSummary);
135154}
136155137156export function expectRecordedTaskProgress({
138157 taskExecutorMocks,
139158 runId,
140159 progressSummary,
141160}: ProgressExpectation): void {
142-expect(taskExecutorMocks.recordTaskRunProgressByRunId).toHaveBeenCalledWith(
143-expect.objectContaining({
144- runId,
145- progressSummary,
146-}),
161+const params = requireMockFirstParam(
162+taskExecutorMocks.recordTaskRunProgressByRunId,
163+"recordTaskRunProgressByRunId params",
147164);
165+expect(params.runId).toBe(runId);
166+expect(params.progressSummary).toBe(progressSummary);
148167}
149168150169export function expectDirectMediaSend({
@@ -155,15 +174,12 @@ export function expectDirectMediaSend({
155174 content,
156175 mediaUrls,
157176}: DirectSendExpectation): void {
158-expect(sendMessageMock).toHaveBeenCalledWith(
159-expect.objectContaining({
160- channel,
161- to,
162- threadId,
163- content,
164- mediaUrls,
165-}),
166-);
177+const params = requireMockFirstParam(sendMessageMock, "sendMessage params");
178+expect(params.channel).toBe(channel);
179+expect(params.to).toBe(to);
180+expect(params.threadId).toBe(threadId);
181+expect(params.content).toBe(content);
182+expect(params.mediaUrls).toEqual(mediaUrls);
167183}
168184169185export function expectFallbackMediaAnnouncement({
@@ -176,24 +192,24 @@ export function expectFallbackMediaAnnouncement({
176192 resultMediaPath,
177193 mediaUrls,
178194}: FallbackAnnouncementExpectation): void {
179-expect(deliverAnnouncementMock).toHaveBeenCalledWith(
180-expect.objectContaining({
181- requesterSessionKey,
182-requesterOrigin: expect.objectContaining({
183- channel,
184- to,
185-}),
186-expectsCompletionMessage: true,
187-internalEvents: expect.arrayContaining([
188-expect.objectContaining({
189- source,
190- announceType,
191-status: "ok",
192-result: expect.stringContaining(resultMediaPath),
193- mediaUrls,
194-replyInstruction: expect.stringContaining("Tell the user"),
195-}),
196-]),
197-}),
195+const params = requireMockFirstParam(
196+deliverAnnouncementMock,
197+"deliverSubagentAnnouncement params",
198+);
199+expect(params.requesterSessionKey).toBe(requesterSessionKey);
200+const requesterOrigin = requireRecord(params.requesterOrigin, "requesterOrigin");
201+expect(requesterOrigin.channel).toBe(channel);
202+expect(requesterOrigin.to).toBe(to);
203+expect(params.expectsCompletionMessage).toBe(true);
204+205+const event = requireRecordArray(params.internalEvents, "internalEvents").find(
206+(candidate) => candidate.source === source && candidate.announceType === announceType,
198207);
208+if (!event) {
209+throw new Error(`expected internal event ${source}/${announceType}`);
210+}
211+expect(event.status).toBe("ok");
212+expect(String(event.result)).toContain(resultMediaPath);
213+expect(event.mediaUrls).toEqual(mediaUrls);
214+expect(String(event.replyInstruction)).toContain("Tell the user");
199215}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。