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
+ } ) ;
2
21
3
22
const BASE_URL = '/tests/navigation' ;
4
23
@@ -20,17 +39,10 @@ test('user can navigate between lessons using nav bar links', async ({ page }) =
20
39
}
21
40
} ) ;
22
41
23
- test ( 'user can navigate between lessons using breadcrumbs' , async ( { page } ) => {
42
+ test ( 'user can navigate between lessons using breadcrumbs' , async ( { page, menu } ) => {
24
43
await page . goto ( `${ BASE_URL } /page-one` ) ;
25
44
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' } ) ;
34
46
35
47
await expect ( page . getByRole ( 'heading' , { level : 1 , name : 'Navigation test - Page three' } ) ) . toBeVisible ( ) ;
36
48
} ) ;
@@ -56,3 +68,26 @@ test("user should see metadata's layout changes after navigation (#318)", async
56
68
useInnerText : true ,
57
69
} ) ;
58
70
} ) ;
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