fix(e2e): replace hard-coded waits with state-based waits in focus-mode-break and take-a-break

Add intermediate state assertion (completeSessionButton not visible)
before checking for break screen in focus-mode-break tests, and replace
unreliable networkidle waits with element visibility assertions in
take-a-break tests.
This commit is contained in:
Johannes Millan 2026-01-29 22:10:15 +01:00
parent ed7fe61d41
commit ea60741889
2 changed files with 21 additions and 17 deletions

View file

@ -62,8 +62,11 @@ test.describe('Focus Mode - Break Controls (Issue #5995)', () => {
await expect(completeSessionButton).toBeVisible({ timeout: 20000 });
await completeSessionButton.click();
// In Pomodoro mode, break auto-starts after session completion
await expect(focusModeBreak).toBeVisible({ timeout: 10000 });
// Wait for session-done transition to complete before checking for break
await expect(completeSessionButton).not.toBeVisible({ timeout: 10000 });
// In Pomodoro mode, break auto-starts after session completion via effects chain
await expect(focusModeBreak).toBeVisible({ timeout: 15000 });
// Verify mode selector is NOT visible on break screen
await expect(modeSelector).not.toBeVisible();
@ -124,8 +127,11 @@ test.describe('Focus Mode - Break Controls (Issue #5995)', () => {
await expect(completeSessionButton).toBeVisible({ timeout: 20000 });
await completeSessionButton.click();
// In Pomodoro mode, break auto-starts after session completion
await expect(focusModeBreak).toBeVisible({ timeout: 10000 });
// Wait for session-done transition to complete before checking for break
await expect(completeSessionButton).not.toBeVisible({ timeout: 10000 });
// In Pomodoro mode, break auto-starts after session completion via effects chain
await expect(focusModeBreak).toBeVisible({ timeout: 15000 });
// Verify both buttons are visible
await expect(backToPlanningButton).toBeVisible();
@ -166,8 +172,11 @@ test.describe('Focus Mode - Break Controls (Issue #5995)', () => {
await expect(completeSessionButton).toBeVisible({ timeout: 20000 });
await completeSessionButton.click();
// In Pomodoro mode, break auto-starts after session completion
await expect(focusModeBreak).toBeVisible({ timeout: 10000 });
// Wait for session-done transition to complete before checking for break
await expect(completeSessionButton).not.toBeVisible({ timeout: 10000 });
// In Pomodoro mode, break auto-starts after session completion via effects chain
await expect(focusModeBreak).toBeVisible({ timeout: 15000 });
// Skip the break
await skipBreakButton.click();
@ -213,8 +222,11 @@ test.describe('Focus Mode - Break Controls (Issue #5995)', () => {
await expect(completeSessionButton).toBeVisible({ timeout: 20000 });
await completeSessionButton.click();
// In Pomodoro mode, break auto-starts after session completion
await expect(focusModeBreak).toBeVisible({ timeout: 10000 });
// Wait for session-done transition to complete before checking for break
await expect(completeSessionButton).not.toBeVisible({ timeout: 10000 });
// In Pomodoro mode, break auto-starts after session completion via effects chain
await expect(focusModeBreak).toBeVisible({ timeout: 15000 });
// Click Back to Planning
await backToPlanningButton.click();

View file

@ -17,7 +17,6 @@ test.describe('Take-a-Break Feature', () => {
// Navigate to settings page where break settings live
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
// Verify we're on the settings page
await expect(page).toHaveURL(/config/);
@ -29,7 +28,6 @@ test.describe('Take-a-Break Feature', () => {
// Navigate to settings
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
// Verify the settings page loaded with sections
await expect(page.locator('.page-settings')).toBeVisible();
@ -45,7 +43,6 @@ test.describe('Take-a-Break Feature', () => {
// Navigate to settings
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
// Verify settings page loaded
await expect(page.locator('.page-settings').first()).toBeVisible();
@ -63,16 +60,14 @@ test.describe('Take-a-Break Feature', () => {
// Navigate to settings
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
await expect(page.locator('.page-settings').first()).toBeVisible();
// Navigate away
await page.goto('/#/tag/TODAY');
await page.waitForLoadState('networkidle');
await expect(page.locator('task-list').first()).toBeVisible();
// Navigate back to settings
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
// Settings should still be accessible (use first() to avoid animation duplicates)
await expect(page.locator('.page-settings').first()).toBeVisible();
@ -83,7 +78,6 @@ test.describe('Take-a-Break Feature', () => {
// Navigate to settings
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
await expect(page.locator('.page-settings')).toBeVisible();
@ -108,12 +102,10 @@ test.describe('Take-a-Break Feature', () => {
// Navigate to settings
await page.goto('/#/config');
await page.waitForLoadState('networkidle');
await expect(page.locator('.page-settings')).toBeVisible();
// Navigate back to work view
await page.goto('/#/tag/TODAY');
await page.waitForLoadState('networkidle');
// Verify we're back at work view
await expect(page).toHaveURL(/tag\/TODAY/);