84 lines
3.9 KiB
TypeScript
84 lines
3.9 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
const screenshotRoot = "../../../../specs/develop/20260623_2/m6_full_e2e";
|
|
|
|
function collectConsoleErrors(page: import("@playwright/test").Page) {
|
|
const consoleErrors: string[] = [];
|
|
page.on("console", (message) => {
|
|
if (message.type() === "error") {
|
|
const text = message.text();
|
|
if (!text.includes("Failed to load resource")) {
|
|
consoleErrors.push(text);
|
|
}
|
|
}
|
|
});
|
|
return consoleErrors;
|
|
}
|
|
|
|
test("opens the RPKI Explorer overview", async ({ page }) => {
|
|
const consoleErrors = collectConsoleErrors(page);
|
|
|
|
await page.goto("/");
|
|
|
|
await expect(page.getByRole("heading", { name: "RPKI Explorer" })).toBeVisible();
|
|
await expect(page.getByRole("heading", { name: "Global RPKI validation health" })).toBeVisible();
|
|
await expect(page.getByRole("button", { name: /Overview/i })).toBeVisible();
|
|
await expect(page.getByLabel("Current run")).toContainText("latest indexed run");
|
|
await expect(page.getByPlaceholder("Exact URI lookup planned in M2")).toBeDisabled();
|
|
await expect(page.getByText("Top repositories by workload")).toBeVisible();
|
|
await expect(page.getByText("Recent validation issues")).toBeVisible();
|
|
await page.screenshot({ path: `${screenshotRoot}/rpki-explorer-overview.png`, fullPage: true });
|
|
expect(consoleErrors).toEqual([]);
|
|
});
|
|
|
|
test("collapses sidebar to icon-only navigation on desktop", async ({ page }) => {
|
|
const consoleErrors = collectConsoleErrors(page);
|
|
|
|
await page.goto("/");
|
|
await expect(page.getByRole("heading", { name: "RPKI Explorer" })).toBeVisible();
|
|
|
|
await page.getByRole("button", { name: "Collapse navigation" }).click();
|
|
await expect(page.locator(".app-shell")).toHaveClass(/sidebar-collapsed/);
|
|
await expect(page.getByRole("button", { name: "Expand navigation" })).toBeVisible();
|
|
await expect(page.locator(".brand-copy")).toHaveCSS("position", "absolute");
|
|
await expect(page.locator(".nav-item").first().locator("span")).toHaveCSS("position", "absolute");
|
|
await expect(page.getByRole("button", { name: "Repositories" })).toBeVisible();
|
|
await page.screenshot({ path: `${screenshotRoot}/rpki-explorer-sidebar-collapsed.png`, fullPage: true });
|
|
|
|
await page.getByRole("button", { name: "Repositories" }).click();
|
|
await expect(page.getByRole("heading", { name: "Repository / publication point / object browser" })).toBeVisible();
|
|
|
|
await page.getByRole("button", { name: "Expand navigation" }).click();
|
|
await expect(page.locator(".app-shell")).not.toHaveClass(/sidebar-collapsed/);
|
|
await expect(page.getByRole("heading", { name: "RPKI Explorer" })).toBeVisible();
|
|
expect(consoleErrors).toEqual([]);
|
|
});
|
|
|
|
test("opens truthful placeholders for unfinished navigation", async ({ page }) => {
|
|
const consoleErrors = collectConsoleErrors(page);
|
|
await page.goto("/");
|
|
|
|
for (const name of ["Publication Points", "Validation", "Exports", "Runs", "API"]) {
|
|
await page.getByRole("button", { name }).click();
|
|
await expect(page.locator("#coming-soon-heading")).toHaveText(name);
|
|
await expect(page.getByText("Coming soon", { exact: true })).toBeVisible();
|
|
await expect(page.getByRole("heading", { name: "Global RPKI validation health" })).toHaveCount(0);
|
|
}
|
|
|
|
await page.screenshot({ path: `${screenshotRoot}/rpki-explorer-coming-soon.png`, fullPage: true });
|
|
expect(consoleErrors).toEqual([]);
|
|
});
|
|
|
|
test("objects page starts from explicit empty state", async ({ page }) => {
|
|
const consoleErrors = collectConsoleErrors(page);
|
|
|
|
await page.goto("/");
|
|
await page.getByRole("button", { name: /Objects/i }).click();
|
|
|
|
await expect(page.getByRole("heading", { name: "Object object" })).toBeVisible();
|
|
await expect(page.getByText("Search an exact URI or open an object from Repository Browser.")).toBeVisible();
|
|
await expect(page.locator("body")).not.toContainText("sample PP");
|
|
await page.screenshot({ path: `${screenshotRoot}/rpki-explorer-objects-empty.png`, fullPage: true });
|
|
expect(consoleErrors).toEqual([]);
|
|
});
|