@@ -1100,59 +1100,61 @@ async function exerciseViewport(
11001100 await expectNoOverflow ( page )
11011101 }
11021102 )
1103- await check ( `${ prefix } /workflow controls open and return to the canvas` , page , async ( ) => {
1104- await visit ( page , `w/${ workflowId } ` )
1105- await expect ( page . locator ( '.react-flow' ) ) . toBeVisible ( { timeout : 120_000 } )
1106- const panel = page . getByRole ( 'complementary' , { name : 'Workflow panel' , exact : true } )
1107- await expect ( panel ) . toBeHidden ( )
1108- await capture ( page , `${ browserName } -${ viewport . name } -workflow-canvas` )
1109- await page . getByRole ( 'button' , { name : 'Workflow' , exact : true } ) . tap ( )
1110- await expectContained ( page , panel )
1111- await capture ( page , `${ browserName } -${ viewport . name } -workflow-panel` )
1112- await page . getByRole ( 'button' , { name : 'Back to canvas' , exact : true } ) . tap ( )
1113- await expect ( panel ) . toBeHidden ( )
1114- await expect
1115- . poll ( async ( ) => {
1116- const canvas = await page . locator ( '.react-flow' ) . boundingBox ( )
1117- const content = await page . locator ( '.workspace-content-shell' ) . boundingBox ( )
1118- return canvas && content ? canvas . width / content . width : 0
1119- } )
1120- . toBeGreaterThan ( 0.95 )
1121- if ( viewport . name === 'phone' ) {
1122- await sql `update workflow set locked = true where id = ${ workflowId } `
1123- await withDocumentNavigation ( page , page . url ( ) , ( ) =>
1124- page . reload ( { waitUntil : 'commit' , timeout : 360_000 } )
1125- )
1126- const notifications = page . getByLabel ( 'Notifications' , { exact : true } )
1127- await expect ( notifications ) . toContainText ( 'This workflow is locked' , {
1128- timeout : 120_000 ,
1129- } )
1130- await expectContained ( page , notifications )
1131- const unlock = notifications . getByRole ( 'button' , {
1132- name : 'Unlock Workflow' ,
1133- exact : true ,
1134- } )
1135- await expectContained ( page , unlock )
1136- await capture ( page , `${ browserName } -phone-workflow-notification` )
1137- const [ unlocked ] = await Promise . all ( [
1138- page . waitForResponse (
1139- ( response ) =>
1140- response . request ( ) . method ( ) === 'PUT' &&
1141- new URL ( response . url ( ) ) . pathname === `/api/workflows/${ workflowId } ` ,
1142- { timeout : 120_000 }
1143- ) ,
1144- unlock . tap ( ) ,
1145- ] )
1146- assert . equal ( unlocked . status ( ) , 200 , 'Unlocking the workflow must succeed over HTTP' )
1103+ if ( viewport . name !== 'tablet' ) {
1104+ await check ( `${ prefix } /workflow controls open and return to the canvas` , page , async ( ) => {
1105+ await visit ( page , `w/${ workflowId } ` )
1106+ await expect ( page . locator ( '.react-flow' ) ) . toBeVisible ( { timeout : 120_000 } )
1107+ const panel = page . getByRole ( 'complementary' , { name : 'Workflow panel' , exact : true } )
1108+ await expect ( panel ) . toBeHidden ( )
1109+ await capture ( page , `${ browserName } -${ viewport . name } -workflow-canvas` )
1110+ await page . getByRole ( 'button' , { name : 'Workflow' , exact : true } ) . tap ( )
1111+ await expectContained ( page , panel )
1112+ await capture ( page , `${ browserName } -${ viewport . name } -workflow-panel` )
1113+ await page . getByRole ( 'button' , { name : 'Back to canvas' , exact : true } ) . tap ( )
1114+ await expect ( panel ) . toBeHidden ( )
11471115 await expect
11481116 . poll ( async ( ) => {
1149- const rows = await sql `select locked from workflow where id = ${ workflowId } `
1150- return rows [ 0 ] ?. locked
1117+ const canvas = await page . locator ( '.react-flow' ) . boundingBox ( )
1118+ const content = await page . locator ( '.workspace-content-shell' ) . boundingBox ( )
1119+ return canvas && content ? canvas . width / content . width : 0
11511120 } )
1152- . toBe ( false )
1153- }
1154- await expectNoOverflow ( page )
1155- } )
1121+ . toBeGreaterThan ( 0.95 )
1122+ if ( viewport . name === 'phone' ) {
1123+ await sql `update workflow set locked = true where id = ${ workflowId } `
1124+ await withDocumentNavigation ( page , page . url ( ) , ( ) =>
1125+ page . reload ( { waitUntil : 'commit' , timeout : 360_000 } )
1126+ )
1127+ const notifications = page . getByLabel ( 'Notifications' , { exact : true } )
1128+ await expect ( notifications ) . toContainText ( 'This workflow is locked' , {
1129+ timeout : 120_000 ,
1130+ } )
1131+ await expectContained ( page , notifications )
1132+ const unlock = notifications . getByRole ( 'button' , {
1133+ name : 'Unlock Workflow' ,
1134+ exact : true ,
1135+ } )
1136+ await expectContained ( page , unlock )
1137+ await capture ( page , `${ browserName } -phone-workflow-notification` )
1138+ const [ unlocked ] = await Promise . all ( [
1139+ page . waitForResponse (
1140+ ( response ) =>
1141+ response . request ( ) . method ( ) === 'PUT' &&
1142+ new URL ( response . url ( ) ) . pathname === `/api/workflows/${ workflowId } ` ,
1143+ { timeout : 120_000 }
1144+ ) ,
1145+ unlock . tap ( ) ,
1146+ ] )
1147+ assert . equal ( unlocked . status ( ) , 200 , 'Unlocking the workflow must succeed over HTTP' )
1148+ await expect
1149+ . poll ( async ( ) => {
1150+ const rows = await sql `select locked from workflow where id = ${ workflowId } `
1151+ return rows [ 0 ] ?. locked
1152+ } )
1153+ . toBe ( false )
1154+ }
1155+ await expectNoOverflow ( page )
1156+ } )
1157+ }
11561158 }
11571159 } finally {
11581160 documentNavigations . delete ( page )
0 commit comments