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.
59 lines
1.9 KiB
TypeScript
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);
|
|
});
|
|
}
|
|
});
|