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
+
16
+ await use ( { navigate } ) ;
17
+ } ,
18
+ } ) ;
2
19
3
20
const BASE_URL = '/tests/navigation' ;
4
21
@@ -20,17 +37,10 @@ test('user can navigate between lessons using nav bar links', async ({ page }) =
20
37
}
21
38
} ) ;
22
39
23
- test ( 'user can navigate between lessons using breadcrumbs' , async ( { page } ) => {
40
+ test ( 'user can navigate between lessons using breadcrumbs' , async ( { page, menu } ) => {
24
41
await page . goto ( `${ BASE_URL } /page-one` ) ;
25
42
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 ( ) ;
43
+ await menu . navigate ( { from : 'Page one' , to : 'Page three' } ) ;
34
44
35
45
await expect ( page . getByRole ( 'heading' , { level : 1 , name : 'Navigation test - Page three' } ) ) . toBeVisible ( ) ;
36
46
} ) ;
@@ -56,3 +66,21 @@ test("user should see metadata's layout changes after navigation (#318)", async
56
66
useInnerText : true ,
57
67
} ) ;
58
68
} ) ;
69
+
70
+ test ( 'user should not see preview on lessons that disable it (#405)' , async ( { page, menu } ) => {
71
+ await page . goto ( `${ BASE_URL } /layout-change-from` ) ;
72
+
73
+ // first page should have preview visible
74
+ await expect ( page . getByRole ( 'heading' , { level : 1 , name : 'Navigation test - Layout change from' } ) ) . toBeVisible ( ) ;
75
+
76
+ const preview = page . frameLocator ( '[title="Custom preview"]' ) ;
77
+ await expect ( preview . getByText ( 'Index page' ) ) . toBeVisible ( ) ;
78
+
79
+ await menu . navigate ( { from : 'Layout change from' , to : 'Layout change all off' } ) ;
80
+
81
+ // page should open
82
+ await expect ( page . getByRole ( 'heading' , { level : 1 , name : 'Navigation test - Layout change all off' } ) ) . toBeVisible ( ) ;
83
+
84
+ // preview should not be visible
85
+ await expect ( page . locator ( 'iframe[title="Custom preview"]' ) ) . not . toBeVisible ( ) ;
86
+ } ) ;
0 commit comments