From 4bab307152b7a801d631f21883049cea4aa659de Mon Sep 17 00:00:00 2001 From: 4gray <4gray@users.noreply.github.com> Date: Sat, 19 Sep 2026 12:47:51 +0200 Subject: [PATCH] test(e2e): give the DASH collection round-trip its cold-load budget (#1632) The "ClearKey reopens from recent and favorites collections" spec does five cold `page.goto` loads of the dev-served app. On the CI runner each one costs ~6 s, so the default 30 s test timeout expired on the last route: every attempt in the affected runs ended as `timedOut`, and the retry trace's final screencast frame shows `/workspace/global-favorites` still on the startup screen at 29.7 s. The two reported "shapes" were just where the clock ran out. Size the test like the other multi-load specs (`test.setTimeout(90_000)`) and assert the "All playlists" radio is checked before waiting for a row only that scope can show, so a lost click fails on the toggle instead of surfacing as a missing row. Closes #1630 Co-authored-by: Claude Fable 5.1 --- apps/web-e2e/src/dash-clearkey.e2e.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/web-e2e/src/dash-clearkey.e2e.ts b/apps/web-e2e/src/dash-clearkey.e2e.ts index 854974976..fcb0b5f06 100644 --- a/apps/web-e2e/src/dash-clearkey.e2e.ts +++ b/apps/web-e2e/src/dash-clearkey.e2e.ts @@ -181,6 +181,10 @@ test('@web @m3u @dash ClearKey and clear DASH channels play inline', async ({ test('@web @m3u @dash ClearKey reopens from recent and favorites collections', async ({ page, }) => { + // Five cold loads of the dev-served app (import + four collection routes) + // cost ~6 s each on the CI runner, so the default 30 s budget expired on + // the last route (#1630). Sized like the other multi-load specs. + test.setTimeout(90_000); await serveDashFixtures(page); await importDashPlaylist(page); await page.getByText('1. ClearKey DASH').click(); @@ -203,10 +207,14 @@ test('@web @m3u @dash ClearKey reopens from recent and favorites collections', a // Full navigation also proves persisted channels survive a cold load. await page.goto(route); if (route.startsWith('/workspace/global-')) { - await page + const allPlaylists = page .locator('.scope-toggle') - .getByText('All playlists', { exact: true }) - .click(); + .getByRole('radio', { name: 'All playlists' }); + await allPlaylists.click(); + // The global routes default to the active playlist's scope; make + // sure the toggle took before waiting for a row only "All + // playlists" can show, or a lost click surfaces as a missing row. + await expect(allPlaylists).toBeChecked(); } const collection = page.locator('app-unified-live-tab'); await collection