61 lines
2.3 KiB
TypeScript
61 lines
2.3 KiB
TypeScript
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);
|
||
});
|
||
});
|