55
66import assert from 'assert' ;
77import { mainWindow } from '../../../base/browser/window.js' ;
8+ import { DeferredPromise } from '../../../base/common/async.js' ;
89import { Event } from '../../../base/common/event.js' ;
910import { DisposableStore , toDisposable } from '../../../base/common/lifecycle.js' ;
1011import { constObservable , derived , IObservable , ISettableObservable , observableValue } from '../../../base/common/observable.js' ;
@@ -115,6 +116,7 @@ class TestActiveSession extends mock<IActiveSession>() {
115116
116117class TestSessionsService extends mock < ISessionsService > ( ) {
117118 override readonly activeSession = observableValue < IActiveSession | undefined > ( this , undefined ) ;
119+ newChatGate : Promise < void > | undefined ;
118120
119121 override async openChat ( session : ISession , chatUri : URI ) : Promise < void > {
120122 if ( ! ( session instanceof TestActiveSession ) ) {
@@ -135,6 +137,7 @@ class TestSessionsService extends mock<ISessionsService>() {
135137 if ( ! ( session instanceof TestActiveSession ) ) {
136138 return ;
137139 }
140+ await this . newChatGate ;
138141 const chat = createChat ( `new-${ session . allChats . get ( ) . length } ` , SessionStatus . Untitled ) ;
139142 session . allChats . set ( [ ...session . allChats . get ( ) , chat ] , undefined ) ;
140143 session . visibleChatTabs . set ( [ ...session . visibleChatTabs . get ( ) , chat ] , undefined ) ;
@@ -399,8 +402,8 @@ suite('Sessions - ChatGroupsView', () => {
399402 } ) ;
400403 } ) ;
401404
402- test ( 'new chat from the tab bar is assigned to its group' , async ( ) => {
403- const { view } = createHarness ( disposables ) ;
405+ test ( 'new chat remains assigned to the group where creation started ' , async ( ) => {
406+ const { sessionsService , view } = createHarness ( disposables ) ;
404407 const main = createChat ( 'main' ) ;
405408 const secondary = createChat ( 'secondary' ) ;
406409 const session = new TestActiveSession ( [ main , secondary ] ) ;
@@ -409,18 +412,25 @@ suite('Sessions - ChatGroupsView', () => {
409412 view . focusAdjacentGroup ( 'previous' ) ;
410413 const groups = Array . from ( view . element . querySelectorAll < HTMLElement > ( '.chat-group-view' ) ) ;
411414 const mainGroup = groups . find ( group => group . querySelector < HTMLElement > ( '.chat-composite-bar-tab' ) ?. dataset . chatResource === main . resource . toString ( ) ) ! ;
415+ const gate = new DeferredPromise < void > ( ) ;
416+ sessionsService . newChatGate = gate . p ;
412417
413418 mainGroup . querySelector < HTMLElement > ( '.chat-composite-bar-new-chat .action-label' ) ! . click ( ) ;
419+ view . focusAdjacentGroup ( 'next' ) ;
420+ gate . complete ( ) ;
421+ await gate . p ;
414422 await Promise . resolve ( ) ;
415423 await Promise . resolve ( ) ;
416424
417425 const newChat = session . activeChat . get ( ) ;
418426 assert . deepStrictEqual ( {
419427 mainGroupTabs : Array . from ( mainGroup . querySelectorAll < HTMLElement > ( '.chat-composite-bar-tab' ) ) . map ( tab => tab . dataset . chatResource ) ,
420428 secondaryGroupTabs : Array . from ( groups . find ( group => group !== mainGroup ) ! . querySelectorAll < HTMLElement > ( '.chat-composite-bar-tab' ) ) . map ( tab => tab . dataset . chatResource ) ,
429+ focusInMainGroup : mainGroup . contains ( mainWindow . document . activeElement ) ,
421430 } , {
422431 mainGroupTabs : [ main . resource . toString ( ) , newChat . resource . toString ( ) ] ,
423432 secondaryGroupTabs : [ secondary . resource . toString ( ) ] ,
433+ focusInMainGroup : true ,
424434 } ) ;
425435 } ) ;
426436
0 commit comments