Spaces:
Runtime error
Runtime error
| import { expect, test } from "@playwright/test"; | |
| const errorPages = [ | |
| { | |
| path: "/400", | |
| heading: "Bad Request", | |
| primaryHref: "/docs", | |
| secondaryHref: "/dashboard/translator", | |
| }, | |
| { | |
| path: "/401", | |
| heading: "Unauthorized", | |
| primaryHref: "/login", | |
| secondaryHref: "/dashboard/api-manager", | |
| }, | |
| { | |
| path: "/403", | |
| heading: "Forbidden", | |
| primaryHref: "/forbidden", | |
| secondaryHref: "/dashboard/settings?tab=security", | |
| }, | |
| { | |
| path: "/408", | |
| heading: "Request Timeout", | |
| primaryHref: "/dashboard/endpoint", | |
| secondaryHref: "/status", | |
| }, | |
| { | |
| path: "/429", | |
| heading: "Too Many Requests", | |
| primaryHref: "/dashboard/settings?tab=resilience", | |
| secondaryHref: "/dashboard/combos", | |
| }, | |
| { | |
| path: "/500", | |
| heading: "Internal Server Error", | |
| primaryHref: "/dashboard/health", | |
| secondaryHref: "/dashboard/logs", | |
| }, | |
| { | |
| path: "/502", | |
| heading: "Bad Gateway", | |
| primaryHref: "/dashboard/providers", | |
| secondaryHref: "/dashboard/translator", | |
| }, | |
| { | |
| path: "/503", | |
| heading: "Service Unavailable", | |
| primaryHref: "/maintenance", | |
| secondaryHref: "/status", | |
| }, | |
| ]; | |
| test.describe("Error and Resilience Pages", () => { | |
| for (const pageSpec of errorPages) { | |
| test(`${pageSpec.path} renders actionable recovery actions`, async ({ page }) => { | |
| const response = await page.goto(pageSpec.path); | |
| expect(response).toBeTruthy(); | |
| const expectedHttpStatus = Number.parseInt(pageSpec.path.slice(1), 10); | |
| expect([200, expectedHttpStatus]).toContain(response?.status()); | |
| await expect(page.getByRole("heading", { name: pageSpec.heading })).toBeVisible(); | |
| await expect(page.locator(`a[href="${pageSpec.primaryHref}"]`).first()).toBeVisible(); | |
| await expect(page.locator(`a[href="${pageSpec.secondaryHref}"]`).first()).toBeVisible(); | |
| }); | |
| } | |
| test("missing route renders not-found recovery actions", async ({ page }) => { | |
| await page.goto("/route-that-does-not-exist"); | |
| await expect(page.getByRole("heading", { name: /Page not found/i })).toBeVisible(); | |
| await expect(page.locator('a[href="/dashboard"]')).toBeVisible(); | |
| await expect(page.locator('a[href="/status"]')).toBeVisible(); | |
| }); | |
| test("/offline explains connectivity and offers recovery actions", async ({ page }) => { | |
| const response = await page.goto("/offline"); | |
| expect(response?.ok()).toBeTruthy(); | |
| await expect(page.getByRole("heading", { name: "Connectivity Issue" })).toBeVisible(); | |
| await expect(page.getByRole("button", { name: "Retry Connection" })).toBeVisible(); | |
| await expect(page.locator('a[href="/status"]')).toBeVisible(); | |
| }); | |
| test("/maintenance provides maintenance guidance and status action", async ({ page }) => { | |
| const response = await page.goto("/maintenance"); | |
| expect(response?.ok()).toBeTruthy(); | |
| await expect(page.getByRole("heading", { name: "Scheduled Maintenance" })).toBeVisible(); | |
| await expect(page.locator('a[href="/status"]')).toBeVisible(); | |
| await expect(page.locator('a[href="/dashboard/health"]')).toBeVisible(); | |
| }); | |
| test("/status shows monitoring shell and refresh control", async ({ page }) => { | |
| const response = await page.goto("/status"); | |
| expect(response?.ok()).toBeTruthy(); | |
| await expect(page.getByRole("heading", { name: "System Status" })).toBeVisible(); | |
| await expect(page.getByRole("button", { name: "Refresh" })).toBeVisible(); | |
| }); | |
| }); | |