diff --git a/tests/e2e/edge-gateways.smoke.spec.js b/tests/e2e/edge-gateways.smoke.spec.js index 0a252303..c2516249 100644 --- a/tests/e2e/edge-gateways.smoke.spec.js +++ b/tests/e2e/edge-gateways.smoke.spec.js @@ -109,6 +109,58 @@ async function acceleratePageTimers(page, timerScale = 0.01) { }, timerScale); } +async function dismissUnexpectedSweetAlert(page) { + const overlays = page.locator(".swal2-container.swal2-backdrop-show"); + + for (let attempt = 0; attempt < 3; attempt += 1) { + const overlay = overlays.first(); + if (!(await overlay.isVisible().catch(() => false))) { + return; + } + + let dismissed = false; + for (const selector of [".swal2-close", ".swal2-cancel", ".swal2-deny", ".swal2-confirm"]) { + const action = overlay.locator(selector).first(); + if (await action.isVisible().catch(() => false)) { + await action.click({ force: true }); + dismissed = true; + break; + } + } + + if (!dismissed) { + await page.keyboard.press("Escape"); + } + + await expect(overlays) + .toHaveCount(0, { timeout: 5_000 }) + .catch(() => {}); + } +} + +async function generateGatewayInstaller(page) { + const button = page.getByTestId("gateway-installer-generate"); + await expect(button).toBeVisible({ timeout: 15_000 }); + await expect(button).toBeEnabled({ timeout: 15_000 }); + + let lastError; + for (let attempt = 0; attempt < 3; attempt += 1) { + await dismissUnexpectedSweetAlert(page); + + try { + await button.click({ timeout: 15_000 }); + return; + } catch (error) { + lastError = error; + if (!/swal2-container|intercepts pointer events/i.test(error?.message || "")) { + throw error; + } + } + } + + throw lastError; +} + test.describe("Edge gateway management smoke", () => { test.describe.configure({ mode: "serial" }); @@ -193,7 +245,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Copy Test Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-install-command")).toHaveValue(/install\.sh\?token=edge-install-token/); await page.getByTestId("gateway-installer-copy").click(); @@ -246,7 +298,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Canary Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-installer-status")).toBeVisible(); await expect.poll(() => page.getByTestId("gateway-installer-status-state").textContent()).toContain("Running"); @@ -274,7 +326,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("CPH Edge 01"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-installer-status")).toBeVisible(); await expect.poll(() => page.getByTestId("gateway-installer-status-state").textContent()).toContain("Running"); @@ -318,7 +370,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Broken Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-installer-status")).toBeVisible(); await expect @@ -382,7 +434,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Canary Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-install-command")).toHaveValue(/install\.sh\?token=edge-install-token/); await expect(page).toHaveURL(/\/superuser\/selfserve\/edge-agents\/703\/overview$/, { timeout: 20_000 });