Aufraeumarbeiten: ESLint, DOM-Verschachtelung, eigene Testwehr

ESLint hatte keine Konfiguration — das Skript "npm run lint" pruefte nichts.
Jetzt Flat Config ohne Formatierungsregeln, dafuer mit den Regeln, die die
Fehler dieses Projekts gemeldet haetten. Er hat gleich zwei gefunden, die
niemand gesucht hatte.

Das Badge rendert ein span statt eines div. Damit ist die Meldung
"div cannot be a descendant of p" weg, die seit Phase 3 auf der Einsatzseite
stand — sie ist der klassische Ausloeser fuer einen Hydration-Fehler.

Die E2E-Tests laufen gegen eine eigene Wehr. Nach fuenf Phasen standen in der
Beispielwehr 120 Atemschutz-Ueberwachungen statt einer und 115 Geraete statt
45; bei jedem Lauf aenderten sich alle Bildschirmfotos. Der Bestand ist einmal
zurueckgesetzt, npm run db:test-reset baut die Testwehr neu auf.

Behoben nebenbei:
- Die Fehlerflaeche der Karte konnte nie etwas anzeigen.
- Zwei useMemo der Lagekarte rechneten bei jedem Rendern neu.
- tests/e2e war vom Typecheck ausgenommen und liess einen doppelt
  deklarierten Bezeichner durch.

Closes #10
Closes #11
Closes #12

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-04 13:24:48 +02:00
co-authored by Claude Opus 5
parent 8081131eb7
commit 7196c7110c
94 changed files with 1447 additions and 428 deletions
+49 -1
View File
@@ -8,7 +8,55 @@ Die Regeln dazu stehen in [docs/VERSIONIERUNG.md](docs/VERSIONIERUNG.md).
## [Unveröffentlicht]
Nächster Schritt ist Phase 9 (Kassenverwaltung).
Aufräumarbeiten vor Phase 9. Drei Punkte, die sich über mehrere Phasen
angesammelt hatten und in jeder Phase Zeit gekostet haben.
### Hinzugefügt
- **ESLint** hat endlich eine Konfiguration (`eslint.config.mjs`, Flat Config).
Bis dahin gab es das Skript `npm run lint`, aber nichts, was es hätte prüfen
können — ein Werkzeug, das aussieht, als prüfe es etwas, und nichts prüft,
ist schlechter als gar keines. Bewusst **ohne** Formatierungsregeln: die
macht Prettier. Dazu `npm run lint:fix`.
- **Eine eigene Wehr für die E2E-Tests.** `npm run db:test-reset` legt
`ff-teststelle` neu an — vollständig, mit denselben Beispieldaten, aber unter
eigener Kennung. Ein Riegel im Skript bricht ab, wenn die Testkennung mit der
der Beispielwehr übereinstimmt.
- `tests/e2e/wehr.ts` — Zugangsdaten und Anmeldung an einer Stelle statt
achtmal wortgleich in acht Dateien. Schlägt die Anmeldung fehl, sagt die
Meldung, dass die Testwehr fehlt, statt zweihundertmal „Timeout".
### Behoben
- **Die E2E-Tests schrieben in die Beispielwehr.** Nach fünf Phasen standen
dort 120 Atemschutz-Überwachungen statt einer, 115 Geräte statt 45 und
39 Einsätze statt 8. Zweimal fielen Tests aus, weil ein gesuchter Eintrag von
Seite 1 gerutscht war; bei jedem Lauf unterschieden sich alle 72
Bildschirmfotos. Der Bestand ist einmal zurückgesetzt, die Tests laufen
jetzt gegen die eigene Wehr.
- **`<div>` in einem `<p>` auf der Einsatzseite** — die Meldung stand seit
Phase 3 in der Konsole und ist der klassische Auslöser für einen
Hydration-Fehler. Die Wurzel war das `Badge`: es rendert jetzt ein `<span>`
statt eines `<div>`. Ein Abzeichen ist Fließtext-Inhalt, und die Darstellung
ändert sich dadurch nicht.
- **Die Fehlerfläche der Karte konnte nie etwas anzeigen** — der Zustand
dahinter wurde nirgends gesetzt. Eine gescheiterte Abfrage sah damit aus wie
„keine Hydranten vorhanden". Gefunden hat das der neue Linter.
- **Die Lagekarte rechnete bei jedem Rendern neu.** Ein `?? []` erzeugte jedes
Mal ein neues leeres Feld und machte damit zwei `useMemo` wirkungslos — bei
einer Karte mit dreißig Elementen und einem Ereignisstrom im Zwei-Sekunden-
Takt kein akademischer Punkt.
- Deutsche Anführungszeichen in vier Ansichten schlossen mit einem geraden
Zoll-Zeichen statt mit dem typografischen.
- Unbenutzte Importe in fünf Dateien.
### Geändert
- `npm run lint` ruft jetzt `eslint .` statt des in Next 15.5 abgekündigten
`next lint`.
- **`tests/e2e` ist nicht mehr vom Typecheck ausgenommen.** Die Ausnahme hat
beim Umbau einen doppelt deklarierten Bezeichner durchgelassen, den erst der
Testlauf gemeldet hat — `npx tsc --noEmit` hatte geschwiegen.
---