mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-27 21:07:01 -06:00
test: remove voice call manager sleeps
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { createManagerHarness, FakeProvider, markCallAnswered } from "./manager.test-harness.js";
|
||||
|
||||
function requireCall(
|
||||
@@ -20,6 +20,18 @@ function requireTurnToken(provider: Awaited<ReturnType<typeof createManagerHarne
|
||||
return firstStart.turnToken;
|
||||
}
|
||||
|
||||
function expectTranscriptWaiter(
|
||||
manager: Awaited<ReturnType<typeof createManagerHarness>>["manager"],
|
||||
callId: string,
|
||||
) {
|
||||
const waiters = (
|
||||
manager as unknown as {
|
||||
transcriptWaiters: Map<string, unknown>;
|
||||
}
|
||||
).transcriptWaiters;
|
||||
expect(waiters.has(callId)).toBe(true);
|
||||
}
|
||||
|
||||
describe("CallManager closed-loop turns", () => {
|
||||
it("completes a closed-loop turn without live audio", async () => {
|
||||
const { manager, provider } = await createManagerHarness({
|
||||
@@ -32,7 +44,10 @@ describe("CallManager closed-loop turns", () => {
|
||||
markCallAnswered(manager, started.callId, "evt-closed-loop-answered");
|
||||
|
||||
const turnPromise = manager.continueCall(started.callId, "How can I help?");
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await vi.waitFor(() => {
|
||||
expect(provider.startListeningCalls).toHaveLength(1);
|
||||
expectTranscriptWaiter(manager, started.callId);
|
||||
});
|
||||
|
||||
manager.processEvent({
|
||||
id: "evt-closed-loop-speech",
|
||||
@@ -107,7 +122,10 @@ describe("CallManager closed-loop turns", () => {
|
||||
markCallAnswered(manager, started.callId, "evt-turn-token-answered");
|
||||
|
||||
const turnPromise = manager.continueCall(started.callId, "Prompt");
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await vi.waitFor(() => {
|
||||
expect(provider.startListeningCalls).toHaveLength(1);
|
||||
expectTranscriptWaiter(manager, started.callId);
|
||||
});
|
||||
|
||||
const expectedTurnToken = requireTurnToken(provider);
|
||||
|
||||
@@ -122,11 +140,7 @@ describe("CallManager closed-loop turns", () => {
|
||||
turnToken: "wrong-token",
|
||||
});
|
||||
|
||||
const pendingState = await Promise.race([
|
||||
turnPromise.then(() => "resolved"),
|
||||
new Promise<"pending">((resolve) => setTimeout(() => resolve("pending"), 0)),
|
||||
]);
|
||||
expect(pendingState).toBe("pending");
|
||||
expectTranscriptWaiter(manager, started.callId);
|
||||
|
||||
manager.processEvent({
|
||||
id: "evt-turn-token-good",
|
||||
@@ -158,7 +172,10 @@ describe("CallManager closed-loop turns", () => {
|
||||
markCallAnswered(manager, started.callId, "evt-multi-answered");
|
||||
|
||||
const firstTurn = manager.continueCall(started.callId, "First question");
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await vi.waitFor(() => {
|
||||
expect(provider.startListeningCalls).toHaveLength(1);
|
||||
expectTranscriptWaiter(manager, started.callId);
|
||||
});
|
||||
manager.processEvent({
|
||||
id: "evt-multi-speech-1",
|
||||
type: "call.speech",
|
||||
@@ -171,7 +188,10 @@ describe("CallManager closed-loop turns", () => {
|
||||
await firstTurn;
|
||||
|
||||
const secondTurn = manager.continueCall(started.callId, "Second question");
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await vi.waitFor(() => {
|
||||
expect(provider.startListeningCalls).toHaveLength(2);
|
||||
expectTranscriptWaiter(manager, started.callId);
|
||||
});
|
||||
manager.processEvent({
|
||||
id: "evt-multi-speech-2",
|
||||
type: "call.speech",
|
||||
@@ -212,7 +232,10 @@ describe("CallManager closed-loop turns", () => {
|
||||
|
||||
for (let i = 1; i <= 5; i++) {
|
||||
const turnPromise = manager.continueCall(started.callId, `Prompt ${i}`);
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await vi.waitFor(() => {
|
||||
expect(provider.startListeningCalls).toHaveLength(i);
|
||||
expectTranscriptWaiter(manager, started.callId);
|
||||
});
|
||||
manager.processEvent({
|
||||
id: `evt-loop-speech-${i}`,
|
||||
type: "call.speech",
|
||||
|
||||
@@ -91,7 +91,7 @@ function requireSingleStartListeningCall(provider: FakeProvider) {
|
||||
type HarnessManager = Awaited<ReturnType<typeof createManagerHarness>>["manager"];
|
||||
|
||||
async function waitForPlaybackDispatch() {
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
||||
}
|
||||
|
||||
async function initiateCallWithMessage(
|
||||
|
||||
Reference in New Issue
Block a user