@@ -1116,6 +1116,87 @@ test('Local New workspace always creates a new stored workspace snapshot', async
11161116 await expect . poll ( async ( ) => countLocalRecords ( ) ) . toBe ( initialLocalRecordCount + 1 )
11171117} )
11181118
1119+ test ( 'Local New workspace shows forked head immediately when source workspace has prTitle' , async ( {
1120+ page,
1121+ } ) => {
1122+ const seededWorkspaceId = 'local_seed_title_carryover_guard'
1123+ const seededWorkspaceTitle = 'Seed local context title'
1124+
1125+ await waitForAppReady ( page , `${ appEntryPath } ` )
1126+
1127+ await seedLocalWorkspaceContexts ( page , [
1128+ {
1129+ id : seededWorkspaceId ,
1130+ repo : '' ,
1131+ base : 'main' ,
1132+ head : 'feat/component-seeded-title-guard' ,
1133+ prTitle : seededWorkspaceTitle ,
1134+ prNumber : null ,
1135+ prContextState : 'inactive' ,
1136+ } ,
1137+ ] )
1138+
1139+ await page . reload ( )
1140+ await waitForAppReady ( page , `${ appEntryPath } ` )
1141+ await connectByotWithSingleRepo ( page )
1142+ await selectWorkspacesRepositoryFilter ( page , '__local__' )
1143+
1144+ await page . getByRole ( 'button' , { name : 'New workspace' , exact : true } ) . click ( )
1145+ await expect ( page . getByRole ( 'complementary' , { name : 'Workspaces' } ) ) . toBeHidden ( )
1146+
1147+ let createdWorkspaceId = ''
1148+ await expect
1149+ . poll ( async ( ) => {
1150+ const records = await getAllWorkspaceRecords ( page )
1151+ const createdRecord = records . find ( record => {
1152+ const id = String ( record ?. id ?? '' ) . trim ( )
1153+ const repo = String ( record ?. repo ?? '' ) . trim ( )
1154+ const prTitle = String ( record ?. prTitle ?? '' ) . trim ( )
1155+ return id !== seededWorkspaceId && ! repo && ! prTitle
1156+ } )
1157+
1158+ createdWorkspaceId = String ( createdRecord ?. id ?? '' ) . trim ( )
1159+ return createdWorkspaceId
1160+ } )
1161+ . not . toBe ( '' )
1162+
1163+ const createdRecords = await getAllWorkspaceRecords ( page )
1164+ const createdRecord = createdRecords . find ( record => {
1165+ const id = String ( record ?. id ?? '' ) . trim ( )
1166+ return id === createdWorkspaceId
1167+ } )
1168+
1169+ const createdHead = String ( createdRecord ?. head ?? '' ) . trim ( )
1170+ expect ( createdHead ) . toBeTruthy ( )
1171+
1172+ await page . getByRole ( 'button' , { name : 'Workspaces' } ) . click ( )
1173+ await selectWorkspacesRepositoryFilter ( page , '__local__' )
1174+
1175+ const selectedWorkspaceId = String (
1176+ ( await page . locator ( '#workspaces-select option:checked' ) . getAttribute ( 'value' ) ) ?? '' ,
1177+ ) . trim ( )
1178+ expect ( selectedWorkspaceId ) . not . toBe ( seededWorkspaceId )
1179+
1180+ const selectedLabelText = await page
1181+ . locator ( '#workspaces-select option:checked' )
1182+ . textContent ( )
1183+ const selectedLabel = String ( selectedLabelText ?? '' ) . trim ( )
1184+
1185+ const selectedRecord = createdRecords . find ( record => {
1186+ const id = String ( record ?. id ?? '' ) . trim ( )
1187+ return id === selectedWorkspaceId
1188+ } )
1189+ const selectedHead = String ( selectedRecord ?. head ?? '' ) . trim ( )
1190+ const selectedPrTitle = String ( selectedRecord ?. prTitle ?? '' ) . trim ( )
1191+
1192+ expect ( selectedPrTitle ) . toBe ( '' )
1193+ expect ( selectedHead ) . toBeTruthy ( )
1194+ expect ( selectedLabel ) . toBe ( selectedHead )
1195+ expect ( selectedLabel ) . not . toBe ( seededWorkspaceTitle )
1196+ await expect ( page . locator ( '#workspace-context-status' ) ) . toContainText ( selectedHead )
1197+ await expect ( page . locator ( '#workspace-context-status' ) ) . toContainText ( 'local' )
1198+ } )
1199+
11191200test ( 'Non-Local New workspace forks a new repository-scoped workspace when entries exist' , async ( {
11201201 page,
11211202} ) => {
0 commit comments