Fix E2E test reliability issues and stale data bugs
- Fix race conditions: Set workers: 1 since all tests share test user state - Fix stale data: GET /api/user and /api/cycle/current now fetch fresh data from database instead of returning stale PocketBase auth store cache - Fix timing: Replace waitForTimeout with retry-based Playwright assertions - Fix mobile test: Use exact heading match to avoid strict mode violation - Add test user setup: Include notificationTime and update rule for users All 1014 unit tests and 190 E2E tests pass. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -53,31 +53,32 @@ test.describe("plan page", () => {
|
||||
test("shows current cycle status section", async ({ page }) => {
|
||||
await page.waitForLoadState("networkidle");
|
||||
|
||||
// Look for Current Status section
|
||||
// Wait for page to finish loading - look for Current Status or error state
|
||||
const statusSection = page.getByRole("heading", {
|
||||
name: "Current Status",
|
||||
});
|
||||
const hasStatus = await statusSection.isVisible().catch(() => false);
|
||||
// Use text content to find error alert (avoid Next.js route announcer)
|
||||
const errorAlert = page.getByText(/error:/i);
|
||||
|
||||
if (hasStatus) {
|
||||
await expect(statusSection).toBeVisible();
|
||||
try {
|
||||
// Wait for Current Status section to be visible (data loaded successfully)
|
||||
await expect(statusSection).toBeVisible({ timeout: 10000 });
|
||||
|
||||
// Should show day number
|
||||
await expect(page.getByText(/day \d+/i)).toBeVisible();
|
||||
await expect(page.getByText(/day \d+/i)).toBeVisible({ timeout: 5000 });
|
||||
|
||||
// Should show training type
|
||||
await expect(page.getByText(/training type:/i)).toBeVisible();
|
||||
await expect(page.getByText(/training type:/i)).toBeVisible({
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
// Should show weekly limit
|
||||
await expect(page.getByText(/weekly limit:/i)).toBeVisible();
|
||||
} else {
|
||||
// If no status, should see loading or error state
|
||||
const loading = page.getByText(/loading/i);
|
||||
const error = page.getByRole("alert");
|
||||
const hasLoading = await loading.isVisible().catch(() => false);
|
||||
const hasError = await error.isVisible().catch(() => false);
|
||||
|
||||
expect(hasLoading || hasError).toBe(true);
|
||||
await expect(page.getByText(/weekly limit:/i)).toBeVisible({
|
||||
timeout: 5000,
|
||||
});
|
||||
} catch {
|
||||
// If status section not visible, check for error alert
|
||||
await expect(errorAlert).toBeVisible({ timeout: 5000 });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user