
























@@ -76,6 +76,18 @@ function requireFirstPlayTtsCall(provider: FakeProvider) {
7676return call;
7777}
787879+function requireRecord(value: unknown, label: string): Record<string, unknown> {
80+if (value === null || typeof value !== "object" || Array.isArray(value)) {
81+throw new Error(`expected ${label} to be a record`);
82+}
83+return value as Record<string, unknown>;
84+}
85+86+function requireSingleStartListeningCall(provider: FakeProvider) {
87+expect(provider.startListeningCalls).toHaveLength(1);
88+return requireRecord(provider.startListeningCalls[0], "start listening call");
89+}
90+7991type HarnessManager = Awaited<ReturnType<typeof createManagerHarness>>["manager"];
80928193async function waitForPlaybackDispatch() {
@@ -201,9 +213,8 @@ describe("CallManager notify and mapping", () => {
201213await answerCall(manager, callId, "evt-conversation-twilio-realtime");
202214203215expect(provider.playTtsCalls).toHaveLength(0);
204-expect(requireCall(manager, callId).metadata).toEqual(
205-expect.objectContaining({ initialMessage: "Tell Nana dinner is at 6pm." }),
206-);
216+const metadata = requireRecord(requireCall(manager, callId).metadata, "call metadata");
217+expect(metadata.initialMessage).toBe("Tell Nana dinner is at 6pm.");
207218});
208219209220it("still speaks initial message in notify mode when realtime is enabled", async () => {
@@ -266,12 +277,9 @@ describe("CallManager notify and mapping", () => {
266277await answerCall(manager, callId, "evt-conversation-telnyx");
267278268279expectFirstPlayTtsText(provider, "Telnyx hello");
269-expect(provider.startListeningCalls).toEqual([
270-expect.objectContaining({
271- callId,
272-providerCallId: "call-uuid",
273-}),
274-]);
280+const startListeningCall = requireSingleStartListeningCall(provider);
281+expect(startListeningCall.callId).toBe(callId);
282+expect(startListeningCall.providerCallId).toBe("call-uuid");
275283expect(requireCall(manager, callId).state).toBe("listening");
276284});
277285@@ -290,16 +298,12 @@ describe("CallManager notify and mapping", () => {
290298await answerCall(manager, callId, "evt-initial-message-start-listening-fails");
291299292300expectFirstPlayTtsText(provider, "Twilio hello");
293-expect(provider.startListeningCalls).toEqual([
294-expect.objectContaining({
295- callId,
296-providerCallId: "call-uuid",
297-}),
298-]);
299-expect(warn).toHaveBeenCalledWith(
300-expect.stringContaining(
301-`[voice-call] Failed to speak initial message for call ${callId}: synthetic start listening failure`,
302-),
301+const startListeningCall = requireSingleStartListeningCall(provider);
302+expect(startListeningCall.callId).toBe(callId);
303+expect(startListeningCall.providerCallId).toBe("call-uuid");
304+expect(warn).toHaveBeenCalledOnce();
305+expect(String(warn.mock.calls[0]?.[0])).toContain(
306+`[voice-call] Failed to speak initial message for call ${callId}: synthetic start listening failure`,
303307);
304308} finally {
305309warn.mockRestore();
@@ -315,7 +319,8 @@ describe("CallManager notify and mapping", () => {
315319316320const afterFailure = requireCall(manager, callId);
317321expect(provider.playTtsCalls).toHaveLength(1);
318-expect(afterFailure.metadata).toEqual(expect.objectContaining({ initialMessage: "Retry me" }));
322+const metadata = requireRecord(afterFailure.metadata, "call metadata after failed playback");
323+expect(metadata.initialMessage).toBe("Retry me");
319324expect(afterFailure.state).toBe("listening");
320325321326await answerCall(manager, callId, "evt-retry-2");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。