M29: polish recruiter engineering story
MobilityOps acceptance / backend (push) Canceled after 0s
MobilityOps acceptance / frontend (push) Canceled after 0s

This commit is contained in:
NuklearRabbit
2026-08-10 18:13:18 +02:00
parent 6365586e82
commit 29325b6c27
57 changed files with 717 additions and 349 deletions
@@ -0,0 +1,40 @@
import { expect, test } from "@playwright/test";
const OUT = "../artifacts/evidence/screenshots";
test("capture current recruiter-facing evidence", async ({ page, request }) => {
await request.post("/api/v1/demo/login", { data: { role: "operations_manager" } });
await request.post("/api/v1/demo/reset");
await page.goto("/login");
await expect(page.getByRole("heading", { name: "Elke overdracht. Eén helder overzicht." })).toBeVisible();
await page.waitForTimeout(500);
await page.screenshot({ path: `${OUT}/1-login.png`, fullPage: true });
await page.getByRole("button", { name: "Bekijk de highlights in 90 seconden" }).click();
await expect(page).toHaveURL(/\/highlights$/);
await page.waitForTimeout(500);
await page.screenshot({ path: `${OUT}/2-highlights.png`, fullPage: true });
await page.goto("/about");
await expect(page.getByRole("heading", { name: "Controle, betrouwbaarheid en uitlegbaarheid" }).first()).toBeVisible();
await page.waitForTimeout(500);
await page.screenshot({ path: `${OUT}/3-engineering-story.png`, fullPage: true });
await page.goto("/dashboard");
await expect(page.getByRole("heading", { name: "Wagenparkstatus" })).toBeVisible();
await page.waitForTimeout(500);
await page.screenshot({ path: `${OUT}/4-dashboard.png`, fullPage: true });
await page.goto("/knowledge");
await page.getByRole("button", { name: "Wat moet ik doen wanneer een voertuig terugkomt met schade?" }).click();
await expect(page.getByText("Onderbouwd met geciteerde procedures")).toBeVisible({ timeout: 15_000 });
await page.waitForTimeout(500);
await page.screenshot({ path: `${OUT}/5-knowledge-evidence.png`, fullPage: true });
await page.setViewportSize({ width: 390, height: 844 });
await page.goto("/highlights");
await expect(page.locator(".highlight-card").first()).toBeVisible();
await page.waitForTimeout(500);
await page.screenshot({ path: `${OUT}/6-highlights-mobile.png` });
});
+1 -1
View File
@@ -5,7 +5,7 @@ test.describe.configure({ mode: "serial" });
test("demo entry screen names the fictional org and never shows a password", async ({ page }) => {
await page.goto("/login");
await expect(page.getByText(/Northstar Mobility/)).toBeVisible();
await expect(page.getByText(/Synthetische demo/)).toBeVisible();
await expect(page.getByText(/Synthetische demo · geen echte klant-/)).toBeVisible();
await expect(page.getByRole("button", { name: "Start begeleide demo" })).toBeVisible();
await expect(page.getByRole("button", { name: "Verken als Operationsmanager" })).toBeVisible();
await expect(page.getByRole("button", { name: "Verken als Verhuurmedewerker" })).toBeVisible();
+1 -1
View File
@@ -27,7 +27,7 @@ test("return flow pre-fills the suspicious odometer reading and explains why", a
await page.getByRole("button", { name: "Retour bevestigen" }).click();
await expect(page.getByRole("heading", { name: "Retour geregistreerd" })).toBeVisible();
await expect(page.getByRole("link", { name: "Automatiseringsstatus bekijken" })).toBeVisible();
await expect(page.getByRole("link", { name: "Auditgeschiedenis bekijken" })).toBeVisible();
await expect(page.getByRole("link", { name: "Volledige verwerking volgen" })).toBeVisible();
});
test("data quality issue detail explains what's wrong and why it matters", async ({ page }) => {
+2 -2
View File
@@ -18,7 +18,7 @@ test("five-minute demo script end to end", async ({ page, request }) => {
await test.step("1. login as Operations Manager", async () => {
await page.goto("/login");
await expect(page.getByText(/Synthetische demo/)).toBeVisible();
await expect(page.getByText(/Synthetische demo · geen echte klant-/)).toBeVisible();
await page.getByRole("button", { name: "Verken als Operationsmanager" }).click();
await expect(page).toHaveURL(/\/dashboard$/);
});
@@ -90,7 +90,7 @@ test("five-minute demo script end to end", async ({ page, request }) => {
await test.step("9. verify responsive navigation at mobile width", async () => {
await page.setViewportSize({ width: 360, height: 800 });
await page.goto("/dashboard");
await expect(page.getByText(/Synthetische demo/).first()).toBeVisible();
await expect(page.getByRole("button", { name: /Synthetische demo/ })).toBeVisible();
await expect(page.getByRole("link", { name: "Overzicht" }).first()).toBeVisible();
const scrollWidth = await page.evaluate(() => document.documentElement.scrollWidth);
const clientWidth = await page.evaluate(() => document.documentElement.clientWidth);
+1 -1
View File
@@ -107,7 +107,7 @@ test.describe("status-recommendation flow", () => {
await resetDemoData(request);
await loginAsOpsManager(page, "nl-BE");
await page.goto("/data-quality/DQ-DEMO-STATUS");
await expect(page.getByRole("heading", { name: "DQ-DEMO-STATUS" })).toBeVisible();
await expect(page.getByText("DQ-DEMO-STATUS", { exact: true })).toBeVisible();
await page.getByRole("button", { name: REVIEW_RECOMMENDATION["nl-BE"] }).click();
await expect(page.getByText("Aanbevolen status")).toBeVisible();
+5 -5
View File
@@ -185,7 +185,7 @@ test("data quality issue detail: defer and reject buttons work", async ({ page,
expect(ref).not.toBe("");
await firstLink.click();
await expect(page).toHaveURL(new RegExp(`/data-quality/${ref}$`));
await expect(page.getByRole("heading", { name: ref })).toBeVisible();
await expect(page.getByText(ref, { exact: true })).toBeVisible();
await page.getByRole("button", { name: "Defer" }).click();
await expect(page.locator(".badge.status-deferred")).toBeVisible();
});
@@ -193,7 +193,7 @@ test("data quality issue detail: defer and reject buttons work", async ({ page,
test("data quality: providing missing fields resolves a vehicle issue", async ({ page, request }) => {
await resetDemoData(request);
await page.goto("/data-quality/DQ-DEMO-ATTENTION");
await expect(page.getByRole("heading", { name: "DQ-DEMO-ATTENTION" })).toBeVisible();
await expect(page.getByText("DQ-DEMO-ATTENTION", { exact: true })).toBeVisible();
await page.getByLabel("Registration number").fill("TST-777");
await page.getByLabel("Make").fill("TestMake");
@@ -207,7 +207,7 @@ test("data quality: providing missing fields resolves a vehicle issue", async ({
test("data quality: resolving a booking overlap blocks one booking", async ({ page, request }) => {
await resetDemoData(request);
await page.goto("/data-quality/DQ-DEMO-OVERLAP");
await expect(page.getByRole("heading", { name: "DQ-DEMO-OVERLAP" })).toBeVisible();
await expect(page.getByText("DQ-DEMO-OVERLAP", { exact: true })).toBeVisible();
await page.getByRole("radio", { name: /Block BK-DEMO-OVERLAP-A/ }).check();
await page.getByRole("button", { name: /^Block BK-DEMO-OVERLAP-A$/ }).click();
@@ -227,7 +227,7 @@ test("data quality: applying the recommended status resolves a vehicle conflict"
}) => {
await resetDemoData(request);
await page.goto("/data-quality/DQ-DEMO-STATUS");
await expect(page.getByRole("heading", { name: "DQ-DEMO-STATUS" })).toBeVisible();
await expect(page.getByText("DQ-DEMO-STATUS", { exact: true })).toBeVisible();
await page.getByRole("button", { name: "Review recommendation" }).click();
await page.getByRole("button", { name: /^Change status to/ }).click();
@@ -248,7 +248,7 @@ test("data quality: retaining canonical resolves an odometer regression issue",
const target = issues[0];
await page.goto(`/data-quality/${target.public_ref}`);
await expect(page.getByRole("heading", { name: target.public_ref })).toBeVisible();
await expect(page.getByText(target.public_ref, { exact: true })).toBeVisible();
await page.getByRole("radio", { name: /Retain canonical/ }).check();
await page.getByRole("button", { name: "Resolve issue" }).click();
+38
View File
@@ -0,0 +1,38 @@
import { expect, test } from "@playwright/test";
test.describe.configure({ mode: "serial" });
test("90-second recruiter entry exposes three verifiable engineering highlights", async ({ page }) => {
await page.goto("/login");
await page.getByRole("button", { name: "Bekijk de highlights in 90 seconden" }).click();
await expect(page).toHaveURL(/\/highlights$/);
await expect(page.getByRole("heading", { name: "De sterkste keuzes in 90 seconden" })).toBeVisible();
await expect(page.locator(".highlight-card")).toHaveCount(3);
await expect(page.getByText("Transactie · idempotency · outbox · degradatie")).toBeVisible();
await expect(page.getByText("RAGcore · citations · veilige degradatie")).toBeVisible();
});
test("Engineering Story exposes architecture, reliability and honest integration evidence", async ({ page }) => {
await page.goto("/login");
await page.getByRole("button", { name: "Verken als Operationsmanager" }).click();
await page.goto("/about");
await expect(page.getByRole("heading", { name: "Controle, betrouwbaarheid en uitlegbaarheid" }).first()).toBeVisible();
await expect(page.getByText("Commit eerst, orkestreer daarna")).toBeVisible();
await expect(page.getByText("AI moet bewijs tonen")).toBeVisible();
await expect(page.getByText("PostgreSQL + audittrail")).toBeVisible();
await expect(page.getByText(/nog niet live gekoppeld/)).toHaveCount(0);
await expect(page.getByText(/unknown procedures/)).toHaveCount(0);
});
test("mobile recruiter surfaces remain readable without horizontal overflow", async ({ page }) => {
await page.setViewportSize({ width: 390, height: 844 });
await page.goto("/login");
await page.getByRole("button", { name: "Bekijk de highlights in 90 seconden" }).click();
await expect(page).toHaveURL(/\/highlights$/);
const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth);
expect(overflow).toBeLessThanOrEqual(1);
await expect(page.locator(".highlight-card").first()).toBeVisible();
});