@@ -8,11 +8,15 @@ import {
88 sessionItemSelector ,
99 dropdownMenuTriggerSelector ,
1010 dropdownMenuContentSelector ,
11+ projectMenuTriggerSelector ,
12+ projectWorkspacesToggleSelector ,
1113 titlebarRightSelector ,
1214 popoverBodySelector ,
1315 listItemSelector ,
1416 listItemKeySelector ,
1517 listItemKeyStartsWithSelector ,
18+ workspaceItemSelector ,
19+ workspaceMenuTriggerSelector ,
1620} from "./selectors"
1721import type { createSdk } from "./utils"
1822
@@ -291,3 +295,69 @@ export async function openStatusPopover(page: Page) {
291295
292296 return { rightSection, popoverBody }
293297}
298+
299+ export async function openProjectMenu ( page : Page , projectSlug : string ) {
300+ const trigger = page . locator ( projectMenuTriggerSelector ( projectSlug ) ) . first ( )
301+ await expect ( trigger ) . toHaveCount ( 1 )
302+
303+ await trigger . focus ( )
304+ await page . keyboard . press ( "Enter" )
305+
306+ const menu = page . locator ( dropdownMenuContentSelector ) . first ( )
307+ const opened = await menu
308+ . waitFor ( { state : "visible" , timeout : 1500 } )
309+ . then ( ( ) => true )
310+ . catch ( ( ) => false )
311+
312+ if ( opened ) {
313+ const viewport = page . viewportSize ( )
314+ const x = viewport ? Math . max ( viewport . width - 5 , 0 ) : 1200
315+ const y = viewport ? Math . max ( viewport . height - 5 , 0 ) : 800
316+ await page . mouse . move ( x , y )
317+ return menu
318+ }
319+
320+ await trigger . click ( { force : true } )
321+
322+ await expect ( menu ) . toBeVisible ( )
323+
324+ const viewport = page . viewportSize ( )
325+ const x = viewport ? Math . max ( viewport . width - 5 , 0 ) : 1200
326+ const y = viewport ? Math . max ( viewport . height - 5 , 0 ) : 800
327+ await page . mouse . move ( x , y )
328+ return menu
329+ }
330+
331+ export async function setWorkspacesEnabled ( page : Page , projectSlug : string , enabled : boolean ) {
332+ const current = await page
333+ . getByRole ( "button" , { name : "New workspace" } )
334+ . first ( )
335+ . isVisible ( )
336+ . then ( ( x ) => x )
337+ . catch ( ( ) => false )
338+
339+ if ( current === enabled ) return
340+
341+ await openProjectMenu ( page , projectSlug )
342+
343+ const toggle = page . locator ( projectWorkspacesToggleSelector ( projectSlug ) ) . first ( )
344+ await expect ( toggle ) . toBeVisible ( )
345+ await toggle . click ( { force : true } )
346+
347+ const expected = enabled ? "New workspace" : "New session"
348+ await expect ( page . getByRole ( "button" , { name : expected } ) . first ( ) ) . toBeVisible ( )
349+ }
350+
351+ export async function openWorkspaceMenu ( page : Page , workspaceSlug : string ) {
352+ const item = page . locator ( workspaceItemSelector ( workspaceSlug ) ) . first ( )
353+ await expect ( item ) . toBeVisible ( )
354+ await item . hover ( )
355+
356+ const trigger = page . locator ( workspaceMenuTriggerSelector ( workspaceSlug ) ) . first ( )
357+ await expect ( trigger ) . toBeVisible ( )
358+ await trigger . click ( { force : true } )
359+
360+ const menu = page . locator ( dropdownMenuContentSelector ) . first ( )
361+ await expect ( menu ) . toBeVisible ( )
362+ return menu
363+ }
0 commit comments