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.
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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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"gelten als Vorgabe; die Felder darunter überschreiben sie für dieses Gerät
beidem zu; beim Wechsel des Fahrzeugs wird der Geräteraum zurückgesetzt
Bearbeiten — auf der Detailseite eines Geräts
Behobene Fehler
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.nannte das Feld „Bezeichnung Stern". Es trägt jetzt
aria-hidden.einen eigenen Routen-Ansager mit der Rolle
alertin jede Seite.Nachweise
npm run typechecknpm run testnpm run test:e2enpm run buildZwei 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.tsmit 32 Tests ab.Testgeräte aus dem E2E-Lauf wurden aus der Entwicklungsdatenbank entfernt.
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>