@@ -9,6 +9,26 @@ function slugFromUrl(url: string) {
99 return / \/ ( [ ^ / ] + ) \/ s e s s i o n (?: \/ | $ ) / . exec ( url ) ?. [ 1 ] ?? ""
1010}
1111
12+ async function waitSlug ( page : Page , skip : string [ ] = [ ] ) {
13+ let prev = ""
14+ await expect
15+ . poll (
16+ ( ) => {
17+ const slug = slugFromUrl ( page . url ( ) )
18+ if ( ! slug ) return ""
19+ if ( skip . includes ( slug ) ) return ""
20+ if ( slug !== prev ) {
21+ prev = slug
22+ return ""
23+ }
24+ return slug
25+ } ,
26+ { timeout : 45_000 } ,
27+ )
28+ . not . toBe ( "" )
29+ return slugFromUrl ( page . url ( ) )
30+ }
31+
1232async function waitWorkspaceReady ( page : Page , slug : string ) {
1333 await openSidebar ( page )
1434 await expect
@@ -31,20 +51,7 @@ async function createWorkspace(page: Page, root: string, seen: string[]) {
3151 await openSidebar ( page )
3252 await page . getByRole ( "button" , { name : "New workspace" } ) . first ( ) . click ( )
3353
34- await expect
35- . poll (
36- ( ) => {
37- const slug = slugFromUrl ( page . url ( ) )
38- if ( ! slug ) return ""
39- if ( slug === root ) return ""
40- if ( seen . includes ( slug ) ) return ""
41- return slug
42- } ,
43- { timeout : 45_000 } ,
44- )
45- . not . toBe ( "" )
46-
47- const slug = slugFromUrl ( page . url ( ) )
54+ const slug = await waitSlug ( page , [ root , ...seen ] )
4855 const directory = base64Decode ( slug )
4956 if ( ! directory ) throw new Error ( `Failed to decode workspace slug: ${ slug } ` )
5057 return { slug, directory }
@@ -60,12 +67,13 @@ async function openWorkspaceNewSession(page: Page, slug: string) {
6067 await expect ( button ) . toBeVisible ( )
6168 await button . click ( { force : true } )
6269
63- await expect . poll ( ( ) => slugFromUrl ( page . url ( ) ) ) . toBe ( slug )
64- await expect ( page ) . toHaveURL ( new RegExp ( `/${ slug } /session(?:[/?#]|$)` ) )
70+ const next = await waitSlug ( page )
71+ await expect ( page ) . toHaveURL ( new RegExp ( `/${ next } /session(?:[/?#]|$)` ) )
72+ return next
6573}
6674
6775async function createSessionFromWorkspace ( page : Page , slug : string , text : string ) {
68- await openWorkspaceNewSession ( page , slug )
76+ const next = await openWorkspaceNewSession ( page , slug )
6977
7078 const prompt = page . locator ( promptSelector )
7179 await expect ( prompt ) . toBeVisible ( )
@@ -76,13 +84,13 @@ async function createSessionFromWorkspace(page: Page, slug: string, text: string
7684 await expect . poll ( async ( ) => ( ( await prompt . textContent ( ) ) ?? "" ) . trim ( ) ) . toContain ( text )
7785 await prompt . press ( "Enter" )
7886
79- await expect . poll ( ( ) => slugFromUrl ( page . url ( ) ) ) . toBe ( slug )
87+ await expect . poll ( ( ) => slugFromUrl ( page . url ( ) ) ) . toBe ( next )
8088 await expect . poll ( ( ) => sessionIDFromUrl ( page . url ( ) ) ?? "" , { timeout : 30_000 } ) . not . toBe ( "" )
8189
8290 const sessionID = sessionIDFromUrl ( page . url ( ) )
8391 if ( ! sessionID ) throw new Error ( `Failed to parse session id from url: ${ page . url ( ) } ` )
84- await expect ( page ) . toHaveURL ( new RegExp ( `/${ slug } /session/${ sessionID } (?:[/?#]|$)` ) )
85- return sessionID
92+ await expect ( page ) . toHaveURL ( new RegExp ( `/${ next } /session/${ sessionID } (?:[/?#]|$)` ) )
93+ return { sessionID, slug : next }
8694}
8795
8896async function sessionDirectory ( directory : string , sessionID : string ) {
@@ -114,17 +122,17 @@ test("new sessions from sidebar workspace actions stay in selected workspace", a
114122 await waitWorkspaceReady ( page , second . slug )
115123
116124 const firstSession = await createSessionFromWorkspace ( page , first . slug , `workspace one ${ Date . now ( ) } ` )
117- sessions . push ( firstSession )
125+ sessions . push ( firstSession . sessionID )
118126
119127 const secondSession = await createSessionFromWorkspace ( page , second . slug , `workspace two ${ Date . now ( ) } ` )
120- sessions . push ( secondSession )
128+ sessions . push ( secondSession . sessionID )
121129
122130 const thirdSession = await createSessionFromWorkspace ( page , first . slug , `workspace one again ${ Date . now ( ) } ` )
123- sessions . push ( thirdSession )
131+ sessions . push ( thirdSession . sessionID )
124132
125- await expect . poll ( ( ) => sessionDirectory ( first . directory , firstSession ) ) . toBe ( first . directory )
126- await expect . poll ( ( ) => sessionDirectory ( second . directory , secondSession ) ) . toBe ( second . directory )
127- await expect . poll ( ( ) => sessionDirectory ( first . directory , thirdSession ) ) . toBe ( first . directory )
133+ await expect . poll ( ( ) => sessionDirectory ( first . directory , firstSession . sessionID ) ) . toBe ( first . directory )
134+ await expect . poll ( ( ) => sessionDirectory ( second . directory , secondSession . sessionID ) ) . toBe ( second . directory )
135+ await expect . poll ( ( ) => sessionDirectory ( first . directory , thirdSession . sessionID ) ) . toBe ( first . directory )
128136 } finally {
129137 const dirs = [ directory , ...workspaces . map ( ( workspace ) => workspace . directory ) ]
130138 await Promise . all (
0 commit comments