30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
const unavailableRun = process.env.EXPECT_UNAVAILABLE === "1";
|
|
|
|
for (const path of [
|
|
"/waterbodies",
|
|
"/waterbodies/vyunok",
|
|
"/waterbodies/vyunok/pike",
|
|
"/fish",
|
|
"/media?type=waterbody",
|
|
"/tackle",
|
|
"/tackle/analytics",
|
|
"/tackle/items/00000000-0000-0000-0000-000000000000",
|
|
"/records",
|
|
"/spots/unknown-0x0",
|
|
"/report",
|
|
"/status",
|
|
]) {
|
|
test(`${path} exposes a cache-safe unavailable state`, async ({ page }) => {
|
|
test.skip(!unavailableRun, "Run with EXPECT_UNAVAILABLE=1 and an API-unavailable web process.");
|
|
const response = await page.goto(path);
|
|
expect(response?.status(), `${path} status`).toBe(503);
|
|
expect(response?.headers()["retry-after"], `${path} retry header`).toBe("60");
|
|
expect(response?.headers()["cache-control"], `${path} cache header`).toBe("no-store");
|
|
await expect(page.getByRole("alert")).toContainText(/временно недоступ|недоступ/i);
|
|
await expect(page.locator('meta[name="robots"]')).toHaveAttribute("content", "noindex, nofollow");
|
|
await expect(page.locator("body")).not.toContainText(/Traceback|localhost:8000|API \d+/i);
|
|
});
|
|
}
|