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
+24 -3
View File
@@ -82,7 +82,26 @@ const prisma = new PrismaClient({
});
const RUNDEN = Number(process.env.AUTH_BCRYPT_ROUNDS ?? 12);
const ORGANISATION_SLUG = "ff-musterhausen";
/**
* Welche Wehr angelegt wird.
*
* Vorgabe ist die Beispielwehr, die in den Bildschirmfotos und in der
* Anleitung steht. Über die Umgebung lässt sich eine zweite anlegen — genau
* dafür gibt es `npm run db:test-reset`:
*
* SEED_SLUG=ff-teststelle SEED_NAME="Freiwillige Feuerwehr Teststelle" \
* SEED_KURZNAME="FF Teststelle" SEED_ADMIN_EMAIL=e2e@teststelle.de \
* npm run db:seed
*
* Der Grund ist ein handfester: die E2E-Tests haben bis Phase 8 in die
* Beispielwehr geschrieben. Nach fünf Phasen standen dort 94 Atemschutz-
* Überwachungen statt einer, und bei jedem Testlauf änderten sich alle
* Bildschirmfotos. Seitdem laufen sie gegen eine eigene Wehr.
*/
const ORGANISATION_SLUG = process.env.SEED_SLUG ?? "ff-musterhausen";
const ORGANISATION_NAME = process.env.SEED_NAME ?? "Freiwillige Feuerwehr Musterhausen";
const ORGANISATION_KURZNAME = process.env.SEED_KURZNAME ?? "FF Musterhausen";
function log(nachricht: string): void {
console.info(`[seed] ${nachricht}`);
@@ -147,8 +166,8 @@ async function organisationAnlegen() {
update: {},
create: {
slug: ORGANISATION_SLUG,
name: "Freiwillige Feuerwehr Musterhausen",
kurzname: "FF Musterhausen",
name: ORGANISATION_NAME,
kurzname: ORGANISATION_KURZNAME,
strasse: "Hauptstraße 12",
plz: "85354",
ort: "Musterhausen",
@@ -3276,6 +3295,8 @@ async function main(): Promise<void> {
log("Fertig.");
log("");
log(`Wehr: ${ORGANISATION_NAME} (${ORGANISATION_SLUG})`);
log("");
log("Anmeldung für den Erststart:");
log(` E-Mail: ${process.env.SEED_ADMIN_EMAIL ?? "admin@beispielwehr.de"}`);
log(` Passwort: ${process.env.SEED_ADMIN_PASSWORT ?? "Feuerwehr2026"}`);