1- import { test , expect } from '@playwright/test' ;
1+ import { test as base , expect } from '@playwright/test' ;
2+
3+ const test = base . extend < { menu : { navigate : ( name : { from : string ; to : string } ) => Promise < void > } } > ( {
4+ menu : async ( { page } , use ) => {
5+ async function navigate ( { from, to } : { from : string ; to : string } ) {
6+ // navigation select can take a while to hydrate on page load, click until responsive
7+ await expect ( async ( ) => {
8+ const button = page . getByRole ( 'button' , { name : `Tests / Navigation / ${ from } ` } ) ;
9+ await button . click ( ) ;
10+ await expect ( page . locator ( '[data-state="open"]' , { has : button } ) ) . toBeVisible ( { timeout : 50 } ) ;
11+ } ) . toPass ( ) ;
12+
13+ await page . getByRole ( 'region' , { name : 'Navigation' } ) . getByRole ( 'link' , { name : to } ) . click ( ) ;
14+
15+ await expect ( page . getByRole ( 'heading' , { level : 1 , name : `Navigation test - ${ to } ` } ) ) . toBeVisible ( ) ;
16+ }
17+
18+ await use ( { navigate } ) ;
19+ } ,
20+ } ) ;
221
322const BASE_URL = '/tests/navigation' ;
423
@@ -20,17 +39,10 @@ test('user can navigate between lessons using nav bar links', async ({ page }) =
2039 }
2140} ) ;
2241
23- test ( 'user can navigate between lessons using breadcrumbs' , async ( { page } ) => {
42+ test ( 'user can navigate between lessons using breadcrumbs' , async ( { page, menu } ) => {
2443 await page . goto ( `${ BASE_URL } /page-one` ) ;
2544
26- // navigation select can take a while to hydrate on page load, click until responsive
27- await expect ( async ( ) => {
28- const button = page . getByRole ( 'button' , { name : 'Tests / Navigation / Page one' } ) ;
29- await button . click ( ) ;
30- await expect ( page . locator ( '[data-state="open"]' , { has : button } ) ) . toBeVisible ( { timeout : 50 } ) ;
31- } ) . toPass ( ) ;
32-
33- await page . getByRole ( 'region' , { name : 'Navigation' } ) . getByRole ( 'link' , { name : 'Page three' } ) . click ( ) ;
45+ await menu . navigate ( { from : 'Page one' , to : 'Page three' } ) ;
3446
3547 await expect ( page . getByRole ( 'heading' , { level : 1 , name : 'Navigation test - Page three' } ) ) . toBeVisible ( ) ;
3648} ) ;
@@ -56,3 +68,26 @@ test("user should see metadata's layout changes after navigation (#318)", async
5668 useInnerText : true ,
5769 } ) ;
5870} ) ;
71+
72+ test ( 'user should not see preview on lessons that disable it (#405)' , async ( { page, menu } ) => {
73+ await page . goto ( `${ BASE_URL } /layout-change-from` ) ;
74+
75+ // first page should have preview visible
76+ await expect ( page . getByRole ( 'heading' , { level : 1 , name : 'Navigation test - Layout change from' } ) ) . toBeVisible ( ) ;
77+
78+ const preview = page . frameLocator ( '[title="Custom preview"]' ) ;
79+ await expect ( preview . getByText ( 'Index page' ) ) . toBeVisible ( ) ;
80+
81+ await menu . navigate ( { from : 'Layout change from' , to : 'Layout change all off' } ) ;
82+
83+ // preview should not be visible
84+ await expect ( page . locator ( 'iframe[title="Custom preview"]' ) ) . not . toBeVisible ( ) ;
85+
86+ // navigate back and check preview is visible once again
87+ await menu . navigate ( { from : 'Layout change all off' , to : 'Layout change from' } ) ;
88+
89+ {
90+ const preview = page . frameLocator ( '[title="Custom preview"]' ) ;
91+ await expect ( preview . getByText ( 'Index page' ) ) . toBeVisible ( ) ;
92+ }
93+ } ) ;
0 commit comments