import { expect, test } from "@playwright/test"; import { mockApi, primeMockSession } from "./support/network.js"; async function primeSuperuserSession(page) { const token = "superuser-edge-gateway-routes-token"; await primeMockSession(page, { token }); } async function openFleetRail(page, testInfo) { if (testInfo.project.name.includes("mobile")) { await page.getByTestId("gateway-mobile-open-rail").click(); } } test.describe("Edge gateway route-aware flows", () => { test.beforeEach(async ({ page }) => { await mockApi(page, { authenticated: true, permissions: ["superuser", "user"], }); await primeSuperuserSession(page); }); test("deep links a canonical gateway page and keeps browser history between gateway selections", async ({ page, }, testInfo) => { await page.goto("/superuser/gateways/701"); await expect(page).toHaveURL(/\/superuser\/gateways\/701$/); await expect(page.getByTestId("gateway-detail-header")).toContainText("CPH Edge 01"); await openFleetRail(page, testInfo); await page.getByTestId("gateway-fleet-item-702").click(); await expect(page).toHaveURL(/\/superuser\/gateways\/702$/); await expect(page.getByTestId("gateway-detail-header")).toContainText("ODE Edge 01"); await page.goBack(); await expect(page).toHaveURL(/\/superuser\/gateways\/701$/); await expect(page.getByTestId("gateway-detail-header")).toContainText("CPH Edge 01"); await page.goForward(); await expect(page).toHaveURL(/\/superuser\/gateways\/702$/); await expect(page.getByTestId("gateway-detail-header")).toContainText("ODE Edge 01"); }); test("shows an unavailable detail state for an unknown canonical gateway id and recovers by selecting a valid gateway", async ({ page, }, testInfo) => { await page.goto("/superuser/gateways/999999"); await expect(page).toHaveURL(/\/superuser\/gateways\/999999$/); await expect(page.getByTestId("gateway-unavailable-state")).toContainText("Gatewayen er ikke tilgængelig"); await openFleetRail(page, testInfo); await page.getByTestId("gateway-fleet-item-701").click(); await expect(page).toHaveURL(/\/superuser\/gateways\/701$/); await expect(page.getByTestId("gateway-detail-header")).toContainText("CPH Edge 01"); }); test("reveals and copies the rotated agent token after an explicit confirmation step", async ({ page }) => { await page.goto("/superuser/gateways/701"); await page.getByTestId("gateway-rotate-credentials").click(); await expect(page.getByTestId("gateway-rotation-confirmation")).toBeVisible(); await page.getByTestId("gateway-rotation-confirm").click(); await expect(page.getByTestId("gateway-rotation-result")).toBeVisible(); await expect(page.getByTestId("gateway-rotation-token")).toHaveValue("rotated-token-701"); await page.evaluate(() => { window.__copiedGatewayToken = ""; Object.defineProperty(navigator, "clipboard", { configurable: true, value: { writeText: async (value) => { window.__copiedGatewayToken = value; }, }, }); }); await page.getByTestId("gateway-rotation-copy").click(); await expect.poll(() => page.evaluate(() => window.__copiedGatewayToken)).toBe("rotated-token-701"); }); test("links the department-scoped gateway manager into the canonical gateway detail page", async ({ page }) => { await page.goto("/superuser/departments/1/gateways"); await expect(page).toHaveURL(/\/superuser\/departments\/1\/gateways$/); await expect(page.getByTestId("gateway-open-full-page")).toBeVisible(); await page.getByTestId("gateway-open-full-page").click(); await expect(page).toHaveURL(/\/superuser\/gateways\/701$/); await expect(page.getByTestId("gateway-detail-header")).toContainText("CPH Edge 01"); }); }); test.describe("Edge gateway background refresh", () => { test("re-fetches page data on an interval without resetting in-progress form edits", async ({ page }) => { await mockApi(page, { authenticated: true, permissions: ["superuser", "user"], edgeGateways: { gatewayOverrides: [ { id: 701, recent_updates: [{ id: 901, target_version: "1.2.2", status: "PENDING", result: {} }], }, ], pendingUpdateByGatewayId: { 701: { jobId: 901, fetchCount: 0, targetVersion: "1.2.2", previousVersion: "1.2.0", outcome: "COMPLETED", }, }, }, }); await primeSuperuserSession(page); await page.goto("/superuser/gateways/701"); const updateTimeline = page.getByTestId("gateway-update-timeline"); const targetVersionField = page.getByLabel("Target-version"); await expect(updateTimeline).toContainText("Afventer"); await targetVersionField.fill("9.9.9"); await expect(updateTimeline).toContainText("Verificerer genstart", { timeout: 8_000, }); await expect(targetVersionField).toHaveValue("9.9.9"); }); });