@@ -1116,6 +1116,91 @@ 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 storedWorkspaceSelect = page . getByRole ( 'combobox' , {
1176+ name : 'Stored workspace' ,
1177+ } )
1178+ const selectedWorkspaceId = String (
1179+ await storedWorkspaceSelect . evaluate ( element => ( element as HTMLSelectElement ) . value ) ,
1180+ ) . trim ( )
1181+ expect ( selectedWorkspaceId ) . not . toBe ( seededWorkspaceId )
1182+
1183+ const selectedLabelText = await storedWorkspaceSelect . evaluate ( element => {
1184+ const select = element as HTMLSelectElement
1185+ return select . selectedOptions . item ( 0 ) ?. textContent ?? ''
1186+ } )
1187+ const selectedLabel = String ( selectedLabelText ?? '' ) . trim ( )
1188+
1189+ const selectedRecord = createdRecords . find ( record => {
1190+ const id = String ( record ?. id ?? '' ) . trim ( )
1191+ return id === selectedWorkspaceId
1192+ } )
1193+ const selectedHead = String ( selectedRecord ?. head ?? '' ) . trim ( )
1194+ const selectedPrTitle = String ( selectedRecord ?. prTitle ?? '' ) . trim ( )
1195+
1196+ expect ( selectedPrTitle ) . toBe ( '' )
1197+ expect ( selectedHead ) . toBeTruthy ( )
1198+ expect ( selectedLabel ) . toBe ( selectedHead )
1199+ expect ( selectedLabel ) . not . toBe ( seededWorkspaceTitle )
1200+ await expect ( page . locator ( '#workspace-context-status' ) ) . toContainText ( selectedHead )
1201+ await expect ( page . locator ( '#workspace-context-status' ) ) . toContainText ( 'local' )
1202+ } )
1203+
11191204test ( 'Non-Local New workspace forks a new repository-scoped workspace when entries exist' , async ( {
11201205 page,
11211206} ) => {
0 commit comments