From 61d798d02d9d6062ef6134cd6fcdc0a4699d2c69 Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Wed, 29 Jul 2026 17:59:40 -0400 Subject: [PATCH] Fix voice bridge test service setup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: db94f3da-b5b5-4265-b2f6-f4dd41a4527c --- .../chat/test/browser/voiceBridge.test.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/vs/sessions/contrib/chat/test/browser/voiceBridge.test.ts b/src/vs/sessions/contrib/chat/test/browser/voiceBridge.test.ts index 57f61026cb02d..8efebe1d26cd3 100644 --- a/src/vs/sessions/contrib/chat/test/browser/voiceBridge.test.ts +++ b/src/vs/sessions/contrib/chat/test/browser/voiceBridge.test.ts @@ -8,7 +8,10 @@ import { Event } from '../../../../../base/common/event.js'; import { constObservable, ISettableObservable, observableValue } from '../../../../../base/common/observable.js'; import { mock } from '../../../../../base/test/common/mock.js'; import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { IChatWidgetService } from '../../../../../workbench/contrib/chat/browser/chat.js'; import { IVoiceSessionController } from '../../../../../workbench/contrib/chat/browser/voiceClient/voiceSessionController.js'; +import { IActiveSession } from '../../../../services/sessions/common/sessionsManagement.js'; +import { ISessionsService } from '../../../../services/sessions/browser/sessionsService.js'; import { INewChatVoiceComposer, NewChatVoiceTargetService } from '../../browser/newChatVoice.js'; import { SessionsVoiceNewComposerContribution } from '../../browser/voiceBridge.contribution.js'; @@ -36,8 +39,18 @@ suite('SessionsVoiceNewComposerContribution', () => { return { controller, getDisconnectCount: () => disconnectCount }; } + function createTarget(): NewChatVoiceTargetService { + const sessionsService = new class extends mock() { + override readonly activeSession = observableValue('activeSession', undefined); + }(); + const chatWidgetService = new class extends mock() { + override readonly onDidChangeFocusedSession = Event.None; + }(); + return new NewChatVoiceTargetService(sessionsService, chatWidgetService); + } + test('disconnects when a fresh welcome composer takes over a connected voice session', () => { - const target = disposables.add(new NewChatVoiceTargetService()); + const target = disposables.add(createTarget()); const isConnected = observableValue('isConnected', false); const { controller, getDisconnectCount } = createController(isConnected); @@ -55,7 +68,7 @@ suite('SessionsVoiceNewComposerContribution', () => { }); test('keeps voice connected when switching to an in-session composer that opts to route', () => { - const target = disposables.add(new NewChatVoiceTargetService()); + const target = disposables.add(createTarget()); const isConnected = observableValue('isConnected', false); const { controller, getDisconnectCount } = createController(isConnected); @@ -72,7 +85,7 @@ suite('SessionsVoiceNewComposerContribution', () => { }); test('does not disconnect when voice is not connected', () => { - const target = disposables.add(new NewChatVoiceTargetService()); + const target = disposables.add(createTarget()); const isConnected = observableValue('isConnected', false); const { controller, getDisconnectCount } = createController(isConnected);