import { expect, test } from "@playwright/test"; import "dotenv/config"; import { anmelden, SEED_TAG } from "./helfer"; /** * Der Einstieg ueber den Aufkleber (#014). * * Die Kamera laesst sich hier nicht pruefen — Chromium bekommt im Testlauf kein * Bild, und ein gefaelschter Videostrom prueft am Ende die Attrappe. Geprueft * wird deshalb das, was ohne Kamera trotzdem gelten muss: die Seite ist * erreichbar, der Knopf in der Huelle fuehrt hin, und der **abgetippte** Code * bringt den Techniker genauso ans Ziel wie der gescannte. Das ist kein * Ersatzweg fuer den Notfall, sondern der Weg, den jeder geht, dessen Browser * keine Kamera freigibt. * * Der Code kommt aus `SEED_TAG` und nicht abgetippt aus dem Kopf: dass es ihn in * dieser Datenbank gibt, prueft `tests/e2e/global-setup.ts` vor dem ersten * Ablauf (#018). */ test.describe("Scannen", () => { test("ist über den Knopf in der Hülle erreichbar", async ({ page }) => { await anmelden(page); await page.getByRole("link", { name: "Scannen" }).first().click(); await page.waitForURL("**/scannen"); await expect(page.getByRole("heading", { name: "Scannen" })).toBeVisible(); }); test("öffnet einen abgetippten Code", async ({ page }) => { await anmelden(page); await page.goto("/scannen"); // Ohne Kamera bleibt das Feld – und es nimmt auch Kleinschreibung an. await page.getByLabel("Code eintippen").fill(SEED_TAG.toLowerCase()); await page.getByRole("button", { name: "Öffnen" }).click(); await page.waitForURL(`**/t/${SEED_TAG}`); }); test("lässt einen unsinnigen Code gar nicht erst abschicken", async ({ page }) => { await anmelden(page); await page.goto("/scannen"); await page.getByLabel("Code eintippen").fill("PC-001"); await expect(page.getByRole("button", { name: "Öffnen" })).toBeDisabled(); await expect(page.getByText(/Die Zeichen 0, O, 1 und I gibt es darin nicht/)).toBeVisible(); }); test("trägt am Handy ohne horizontales Scrollen", async ({ page, isMobile }) => { test.skip(!isMobile, "Nur im Projekt „handy“."); await anmelden(page); await page.goto("/scannen"); const masse = await page.evaluate(() => ({ scroll: document.documentElement.scrollWidth, sichtbar: document.documentElement.clientWidth, })); expect(masse.scroll).toBeLessThanOrEqual(masse.sichtbar); }); });