Geräteformular zum Anlegen und Bearbeiten #2

Merged
florian.wilde merged 1 commits from feat/phase-1-geraeteformular into main 2026-09-03 07:53:22 +00:00
Owner

Schließt die letzte offene Lücke aus Phase 1. Bis dahin ließen sich Geräte nur
über den Import erfassen — für einen Bestand richtig, für ein einzelnes
nachbeschafftes Gerät umständlich.

Was zu testen ist

Anlegen — /geraete → „Neues Gerät"

  • Nur Inventarnummer und Bezeichnung sind Pflicht
  • Gerätetyp wählen: Bezeichnung wird übernommen, Prüfintervall und Lebensdauer
    gelten als Vorgabe; die Felder darunter überschreiben sie für dieses Gerät
  • Der graue Kasten „Daraus ergibt sich" rechnet beim Tippen mit
  • Der Umschalter „An einem Standort / Auf einem Fahrzeug" lässt nur eines von
    beidem zu; beim Wechsel des Fahrzeugs wird der Geräteraum zurückgesetzt
  • Ohne Lagerung absenden → verständliche Meldung, nichts wird gespeichert

Bearbeiten — auf der Detailseite eines Geräts

  • Alle Werte sind vorbelegt
  • Nach dem Speichern steht die Änderung im Verlauf des Geräts

Behobene Fehler

  • Das Formular stürzte beim ersten Rechnen ab. Die Vorgabewerte lagen in
    einem "use client"-Modul und wurden von einer Server-Komponente importiert.
    Dort kommt nur eine Client-Referenz an, kein Objekt — das Spreaden davon
    ergibt lauter undefined. Die Werte liegen jetzt in einem eigenen Modul.
  • Das Sternchen an Pflichtfeldern wurde vorgelesen. Eine Sprachausgabe
    nannte das Feld „Bezeichnung Stern". Es trägt jetzt aria-hidden.
  • Fehlermeldungen in Formularen sind eindeutig ansteuerbar — Next.js hängt
    einen eigenen Routen-Ansager mit der Rolle alert in jede Seite.

Nachweise

Prüfung Ergebnis
npm run typecheck ohne Ausgabe
npm run test 104 grün
npm run test:e2e 56 grün, 2 begründet übersprungen
npm run build 19 Routen

Zwei E2E-Tests laufen nicht unter Touch-Emulation: Chromium nimmt dort keine
zeichenweise Eingabe in Datumsfelder an, sondern öffnet den Auswähler des
Betriebssystems. Sie sind mit Begründung übersprungen — die Fristenrechnung
selbst deckt tests/unit/qr-und-fristen.test.ts mit 32 Tests ab.

Testgeräte aus dem E2E-Lauf wurden aus der Entwicklungsdatenbank entfernt.

Schließt die letzte offene Lücke aus Phase 1. Bis dahin ließen sich Geräte nur über den Import erfassen — für einen Bestand richtig, für ein einzelnes nachbeschafftes Gerät umständlich. ## Was zu testen ist **Anlegen** — `/geraete` → „Neues Gerät" - Nur Inventarnummer und Bezeichnung sind Pflicht - Gerätetyp wählen: Bezeichnung wird übernommen, Prüfintervall und Lebensdauer gelten als Vorgabe; die Felder darunter überschreiben sie für dieses Gerät - Der graue Kasten „Daraus ergibt sich" rechnet beim Tippen mit - Der Umschalter „An einem Standort / Auf einem Fahrzeug" lässt nur eines von beidem zu; beim Wechsel des Fahrzeugs wird der Geräteraum zurückgesetzt - Ohne Lagerung absenden → verständliche Meldung, nichts wird gespeichert **Bearbeiten** — auf der Detailseite eines Geräts - Alle Werte sind vorbelegt - Nach dem Speichern steht die Änderung im Verlauf des Geräts ## Behobene Fehler - **Das Formular stürzte beim ersten Rechnen ab.** Die Vorgabewerte lagen in einem `"use client"`-Modul und wurden von einer Server-Komponente importiert. Dort kommt nur eine Client-Referenz an, kein Objekt — das Spreaden davon ergibt lauter `undefined`. Die Werte liegen jetzt in einem eigenen Modul. - **Das Sternchen an Pflichtfeldern wurde vorgelesen.** Eine Sprachausgabe nannte das Feld „Bezeichnung Stern". Es trägt jetzt `aria-hidden`. - Fehlermeldungen in Formularen sind eindeutig ansteuerbar — Next.js hängt einen eigenen Routen-Ansager mit der Rolle `alert` in jede Seite. ## Nachweise | Prüfung | Ergebnis | |---|---| | `npm run typecheck` | ohne Ausgabe | | `npm run test` | 104 grün | | `npm run test:e2e` | 56 grün, 2 begründet übersprungen | | `npm run build` | 19 Routen | Zwei E2E-Tests laufen nicht unter Touch-Emulation: Chromium nimmt dort keine zeichenweise Eingabe in Datumsfelder an, sondern öffnet den Auswähler des Betriebssystems. Sie sind mit Begründung übersprungen — die Fristenrechnung selbst deckt `tests/unit/qr-und-fristen.test.ts` mit 32 Tests ab. Testgeräte aus dem E2E-Lauf wurden aus der Entwicklungsdatenbank entfernt.
florian.wilde added 1 commit 2026-09-03 07:21:00 +00:00
Schliesst die letzte offene Luecke aus Phase 1. Bis dahin liessen sich Geraete
nur ueber den Import erfassen — fuer einen Bestand richtig, fuer ein einzelnes
nachbeschafftes Geraet umstaendlich.

Neu:
- /geraete/neu und /geraete/<id>/bearbeiten, beide ueber dieselbe Komponente
- Die Lagerung ist ein Umschalter statt zweier Auswahlfelder. Standort und
  Fahrzeug schliessen sich aus; so kann der Fehler gar nicht erst entstehen,
  den die Datenbank sonst abweisen wuerde. Beim Wechsel des Fahrzeugs wird die
  Raumangabe zurueckgesetzt.
- Prueftermin und Lebensdauerende werden beim Tippen vorgerechnet, mit
  denselben Funktionen wie auf dem Server. Beim Speichern rechnet der Server
  erneut und behaelt das letzte Wort.
- Gibt es nur einen Standort, ist er beim Anlegen vorbelegt.
- Knopf "Neues Geraet" in der Liste, "Bearbeiten" auf der Detailseite

Behoben:
- Das Formular stuerzte beim ersten Rechnen ab. Die Vorgabewerte lagen in einem
  "use client"-Modul und wurden von einer Server-Komponente importiert; dort
  kommt nur eine Client-Referenz an, kein Objekt, und das Spreaden ergibt lauter
  undefined. Die Werte liegen jetzt in geraet-formular-werte.ts ohne
  "use client".
- Das Sternchen an Pflichtfeldern wurde von Sprachausgaben mitgelesen
  ("Bezeichnung Stern"). Es traegt jetzt aria-hidden; dass ein Feld ausgefuellt
  werden muss, sagt bereits das required-Attribut.
- Fehlermeldungen in Formularen sind eindeutig ansteuerbar. Next.js haengt
  einen eigenen Routen-Ansager mit der Rolle "alert" in jede Seite.

Tests:
- 7 neue Playwright-Tests zum Formular, darunter die Lagerungsregel und die
  Fristenvorschau
- Zwei davon laufen nicht unter Touch-Emulation: Chromium nimmt dort keine
  zeichenweise Eingabe in Datumsfelder an. Begruendet uebersprungen, die
  Rechnung selbst deckt qr-und-fristen.test.ts ab.
- Insgesamt 104 Unit-Tests und 56 E2E-Tests gruen

Anleitung, Changelog, Devlog, Aufwandsschaetzung und Roadmap fortgeschrieben.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
florian.wilde merged commit 7f866ac35c into main 2026-09-03 07:53:22 +00:00
florian.wilde deleted branch feat/phase-1-geraeteformular 2026-09-03 07:53:22 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/FireAdministration#2