Files
pleno-vue/tests/e2e/qr-new-customer-layout.spec.ts
T
Jeppe B dbe9f6b0b2 Redirect QR signups to kundeoprettelse
Redirect legacy QR signup routes for new customers and drivers to the shared /kundeoprettelse customer creation page.

Validated with focused eslint and QR Playwright coverage for mobile and desktop.
2026-07-09 11:19:30 +02:00

59 lines
1.9 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { mockApi } from "./support/network.js";
const controlSelectors = [
"#customer_cvr",
"#email",
"#customer_phone",
"#customer-register-button",
"#driver_cvr",
"#driver_phone",
"#driver-register-button",
];
async function expectNoHorizontalOverflow(page) {
const dimensions = await page.evaluate(() => ({
bodyScrollWidth: document.body.scrollWidth,
documentScrollWidth: document.documentElement.scrollWidth,
viewportWidth: document.documentElement.clientWidth,
}));
expect(Math.max(dimensions.bodyScrollWidth, dimensions.documentScrollWidth)).toBeLessThanOrEqual(
dimensions.viewportWidth + 1
);
}
async function expectControlWithinViewport(page, selector: string) {
const box = await page.locator(selector).boundingBox();
expect(box, `${selector} should have a rendered box`).not.toBeNull();
const viewport = page.viewportSize();
expect(viewport, "Project should define a viewport").not.toBeNull();
expect(box!.x).toBeGreaterThanOrEqual(0);
expect(box!.x + box!.width).toBeLessThanOrEqual(viewport!.width + 1);
expect(box!.height).toBeGreaterThanOrEqual(44);
}
test.describe("customer creation QR redirects", () => {
test.beforeEach(async ({ page }) => {
await mockApi(page, { authenticated: false });
});
for (const path of ["/qr/new-customer", "/qr/new-driver"]) {
test(`${path} redirects to the shared customer creation page`, async ({ page }) => {
await page.goto(path);
await expect(page).toHaveURL(/\/kundeoprettelse$/);
await expect(page.locator(".hero-section")).toBeVisible();
await expect(page.locator(".truckwash-signup")).toBeVisible();
for (const selector of controlSelectors) {
await expect(page.locator(selector)).toBeVisible();
await expectControlWithinViewport(page, selector);
}
await expectNoHorizontalOverflow(page);
});
}
});