@@ -8,23 +8,15 @@ test.beforeEach(async ({ page }) => {
88 } ) ;
99} ) ;
1010
11- test ( "onboarding starts from the loaded sample and opens the look library " , async ( { page } ) => {
11+ test ( "browse looks opens the look library from the compose step " , async ( { page } ) => {
1212 await startBrowserCoverage ( page ) ;
13- await page . addInitScript ( ( ) => {
14- localStorage . removeItem ( "ditherer-onboarding-complete" ) ;
15- } ) ;
1613 await page . setViewportSize ( { width : 1440 , height : 1000 } ) ;
1714 await page . goto ( "/" ) ;
1815
19- const onboarding = page . getByRole ( "complementary" , { name : "Getting started" } ) ;
20- await expect ( onboarding ) . toContainText ( "Ready to remix" ) ;
21- await expect ( onboarding ) . toContainText ( "sample video and starter dither are already running" ) ;
22- await expect ( onboarding . getByRole ( "button" , { name : "Browse looks" } ) ) . toBeVisible ( ) ;
23- await expect ( onboarding . getByRole ( "button" , { name : "Use my media" } ) ) . toBeVisible ( ) ;
24- await expect ( onboarding . getByRole ( "button" , { name : "Try an example" } ) ) . toHaveCount ( 0 ) ;
25-
26- await onboarding . getByRole ( "button" , { name : "Browse looks" } ) . click ( ) ;
27- await expect ( onboarding ) . toBeHidden ( ) ;
16+ await page . getByRole ( "button" , { name : "Compose" , exact : true } ) . click ( ) ;
17+ const browseLooks = page . getByRole ( "button" , { name : / B r o w s e l o o k s / } ) ;
18+ await expect ( browseLooks ) . toBeVisible ( ) ;
19+ await browseLooks . click ( ) ;
2820 await expect ( page . getByTestId ( "filter-library-dialog" ) ) . toBeVisible ( ) ;
2921 await writeBrowserCoverage ( page , "ux-onboarding" ) ;
3022} ) ;
@@ -101,7 +93,7 @@ test("docks canvases, compares output, and restores modal focus", async ({ page
10193 await expect ( outputWindow ) . toBeVisible ( ) ;
10294 await expect ( page . locator ( "#source-task" ) ) . toBeVisible ( ) ;
10395 await expect ( page . locator ( "#compose-task" ) ) . toBeHidden ( ) ;
104- await expect ( page . getByRole ( "region " , { name : "Choose source media" } ) ) . toContainText ( "Step 1 of 5 ") ;
96+ await expect ( page . getByRole ( "button " , { name : "Source" , exact : true } ) ) . toHaveAttribute ( "aria-current" , "page ") ;
10597
10698 await page . getByRole ( "button" , { name : "Compose" , exact : true } ) . click ( ) ;
10799 await page . waitForTimeout ( 400 ) ;
@@ -112,9 +104,10 @@ test("docks canvases, compares output, and restores modal focus", async ({ page
112104 const chainComposer = page . locator ( "#chain-composer" ) ;
113105 await expect ( chainComposer . getByText ( "Filter chain" , { exact : true } ) ) . toBeVisible ( ) ;
114106 await expect ( page . locator ( "#source-task" ) ) . toBeHidden ( ) ;
115- await expect ( page . locator ( "#active-filter-options" ) ) . toBeHidden ( ) ;
107+ // Compose now shows the stage list and the active-stage inspector together.
108+ await expect ( page . locator ( "#active-filter-options" ) ) . toBeVisible ( ) ;
116109 await expect ( page . locator ( "#preview-output-settings" ) ) . toBeHidden ( ) ;
117- await expect ( page . getByRole ( "region " , { name : "Build the filter chain" } ) ) . toContainText ( "Step 2 of 5 ") ;
110+ await expect ( page . getByRole ( "button " , { name : "Compose" , exact : true } ) ) . toHaveAttribute ( "aria-current" , "page ") ;
118111 await expect ( chainComposer . getByText ( "1 stage" , { exact : true } ) ) . toBeVisible ( ) ;
119112 const activeStage = chainComposer . locator ( '[data-stage-active="true"]' ) ;
120113 await expect ( activeStage ) . toHaveCount ( 1 ) ;
@@ -144,10 +137,9 @@ test("docks canvases, compares output, and restores modal focus", async ({ page
144137 expect ( outputBox ) . not . toBeNull ( ) ;
145138 expect ( inputBox ! . x + inputBox ! . width <= outputBox ! . x || outputBox ! . x + outputBox ! . width <= inputBox ! . x ) . toBe ( true ) ;
146139
147- await page . getByRole ( "button" , { name : "Adjust" , exact : true } ) . click ( ) ;
148- await expect ( chainComposer ) . toBeHidden ( ) ;
140+ // Adjust merged into Compose: the inspector is already visible here.
141+ await expect ( chainComposer ) . toBeVisible ( ) ;
149142 await expect ( page . locator ( "#active-filter-options" ) ) . toBeVisible ( ) ;
150- await expect ( page . getByRole ( "region" , { name : "Tune the active stage" } ) ) . toContainText ( "Step 3 of 5" ) ;
151143 expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 0 ) ;
152144 await expect ( inputWindow ) . toBeInViewport ( ) ;
153145 await expect ( outputWindow ) . toBeInViewport ( ) ;
@@ -164,7 +156,7 @@ test("docks canvases, compares output, and restores modal focus", async ({ page
164156 await page . getByRole ( "button" , { name : "Preview" , exact : true } ) . click ( ) ;
165157 await expect ( page . locator ( "#compose-task" ) ) . toBeHidden ( ) ;
166158 await expect ( page . locator ( "#preview-output-settings" ) ) . toBeVisible ( ) ;
167- await expect ( page . getByRole ( "region " , { name : "Review the output" } ) ) . toContainText ( "Step 4 of 5 ") ;
159+ await expect ( page . getByRole ( "button " , { name : "Preview" , exact : true } ) ) . toHaveAttribute ( "aria-current" , "page ") ;
168160 expect ( await page . evaluate ( ( ) => window . scrollY ) ) . toBe ( 0 ) ;
169161 await expect ( inputWindow ) . toBeInViewport ( ) ;
170162 await expect ( outputWindow ) . toBeInViewport ( ) ;
@@ -216,7 +208,7 @@ test("uses one focused mobile task and keeps library actions reachable", async (
216208 await expect ( page . locator ( "#compose-task" ) ) . toBeHidden ( ) ;
217209
218210 await page . getByRole ( "button" , { name : "Preview" , exact : true } ) . click ( ) ;
219- const taskNavBox = await page . getByRole ( "navigation" , { name : "Workbench tasks and layout " } ) . boundingBox ( ) ;
211+ const taskNavBox = await page . getByRole ( "navigation" , { name : "Workflow steps " } ) . boundingBox ( ) ;
220212 const previewTitleBox = await page . getByText ( / ^ O u t p u t - / ) . boundingBox ( ) ;
221213 expect ( taskNavBox ) . not . toBeNull ( ) ;
222214 expect ( previewTitleBox ) . not . toBeNull ( ) ;
@@ -227,7 +219,7 @@ test("uses one focused mobile task and keeps library actions reachable", async (
227219 await expect ( page . locator ( "#source-task" ) ) . toBeHidden ( ) ;
228220 await expect ( page . locator ( "#compose-task" ) ) . toBeVisible ( ) ;
229221 await expect ( page . locator ( "#chain-composer" ) ) . toBeVisible ( ) ;
230- await expect ( page . locator ( "#active-filter-options" ) ) . toBeHidden ( ) ;
222+ await expect ( page . locator ( "#active-filter-options" ) ) . toBeVisible ( ) ;
231223 await expect ( page . locator ( "#chain-composer" ) . getByText ( "Runs top to bottom" ) ) . toBeVisible ( ) ;
232224
233225 await page . getByRole ( "combobox" , { name : "Add filter..." , exact : true } ) . click ( ) ;
@@ -244,8 +236,7 @@ test("uses one focused mobile task and keeps library actions reachable", async (
244236 expect ( typeaheadItemBox ! . height ) . toBeGreaterThanOrEqual ( 60 ) ;
245237 await page . keyboard . press ( "Escape" ) ;
246238
247- await page . getByRole ( "button" , { name : "Adjust" , exact : true } ) . click ( ) ;
248- await expect ( page . locator ( "#chain-composer" ) ) . toBeHidden ( ) ;
239+ await expect ( page . locator ( "#chain-composer" ) ) . toBeVisible ( ) ;
249240 await expect ( page . locator ( "#active-filter-options" ) ) . toBeVisible ( ) ;
250241 const inspector = page . getByLabel ( "Active filter parameters" ) ;
251242 await expect ( inspector ) . toContainText ( "Stage 1 of 1 · Parameters" ) ;
@@ -288,7 +279,7 @@ test("keeps the compact workbench focused and its touch targets reachable", asyn
288279
289280 await expect ( page . locator ( "#source-task" ) ) . toBeVisible ( ) ;
290281 await expect ( page . locator ( "main [role='presentation']" ) . first ( ) ) . toBeHidden ( ) ;
291- const taskNav = page . getByRole ( "navigation" , { name : "Workbench tasks and layout " } ) ;
282+ const taskNav = page . getByRole ( "navigation" , { name : "Workflow steps " } ) ;
292283 const taskNavBox = await taskNav . boundingBox ( ) ;
293284 expect ( taskNavBox ) . not . toBeNull ( ) ;
294285 expect ( taskNavBox ! . height ) . toBeLessThanOrEqual ( 60 ) ;
@@ -355,7 +346,6 @@ test("keeps desktop chrome within the viewport and canvas actions on one row", a
355346 expect ( box ! . height ) . toBeGreaterThanOrEqual ( 24 ) ;
356347 }
357348
358- await page . getByRole ( "button" , { name : "Adjust" , exact : true } ) . click ( ) ;
359349 const swatchBox = await page . getByRole ( "button" , { name : / ^ R e m o v e p a l e t t e c o l o r 1 , / } ) . boundingBox ( ) ;
360350 const extractBox = await page . getByRole ( "button" , { name : / E x t r a c t f r o m i n p u t / } ) . boundingBox ( ) ;
361351 expect ( swatchBox ) . not . toBeNull ( ) ;
@@ -391,8 +381,6 @@ test("uses touch-sized source, section, and preview controls on phones", async (
391381
392382 await page . getByRole ( "button" , { name : "Compose" , exact : true } ) . click ( ) ;
393383 await expectTouchSize ( page . getByRole ( "combobox" , { name : "Add filter..." , exact : true } ) ) ;
394-
395- await page . getByRole ( "button" , { name : "Adjust" , exact : true } ) . click ( ) ;
396384 await expectTouchSize ( page . getByRole ( "button" , { name : "Play / Stop" } ) ) ;
397385 await expectTouchSize ( page . getByRole ( "button" , { name : / ^ R e m o v e p a l e t t e c o l o r 1 , / } ) ) ;
398386
0 commit comments