Docs: neue Fixes in todo + TESTING nachpflegen

todo.md: drei letzte Bug/Feature-Einträge
- AutosaveDateInput (Kündigungsdatum-Fokus-Sprung)
- IMAP-Humanizer (Anhang + Sync)
- Bankkarte-Beschreibung in Vertrags-Ansicht + Select

TESTING.md: neuer Abschnitt "E-Mail-Client (IMAP/Anhänge)"
mit Testfällen für Sync-Fehler, Anhang-Download-Fehler und
Autosave-Datumsfelder.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 15:42:18 +02:00
co-authored by Claude Opus 4.7
parent 70724e35dc
commit dc7dcfb5f3
2 changed files with 65 additions and 0 deletions
+31
View File
@@ -97,6 +97,37 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🐞 Kündigungsdatum: Cursor sprang beim Tippen aus dem Feld**
- `<input type=date>` feuerte `onChange` bei jedem Tastendruck; sobald
z.B. `18.08.0002` ein gültiges Datum ergab, feuerte die PUT-Mutation,
Server-Antwort re-renderte den Input, Cursor sprang raus, Seite
scrollte, weiteres Tippen landete im nächsten Feld.
- Fix: neue `AutosaveDateInput`-Komponente hält den Wert während der
Eingabe lokal, feuert `onSave` erst bei Blur/Enter. Escape verwirft.
Angewendet auf beide Kündigungsbestätigungs-Datumsfelder in
ContractDetail. Andere App-Datumsfelder laufen über react-hook-form
(batched Submit) und sind nicht betroffen.
- [x] **🐞 IMAP-Fehler: „Command failed" ohne Kontext**
- `imapflow` wirft bei jedem IMAP-NO/BAD-Response nur
`new Error('Command failed')` und legt Details in `.responseText`/
`.responseStatus` ab. Wir haben sie nirgends gelesen → User sah
im Sync-Toast und im Anhang-Download nur "Command failed" ohne
Ursache. Realer Fall: abgelaufenes Postfach-Passwort.
- Fix: zentraler `humanizeImapError()`-Helper in `imapService.ts`.
Extrahiert responseText/responseStatus, erkennt Auth-Fehler,
UID-Stale, TLS-/Netzwerk-Fehler und gibt jeweils eine klare
Meldung mit Handlungsanweisung zurück. Angewendet auf
`fetchAttachmentInner`, `downloadAttachment`-Controller und
`syncEmailsForAccount`.
- [x] **🆕 Bankkarte-Beschreibung in Vertragsansicht + Auswahl**
- Nach dem Anlegen des `description`-Feldes (Bankkarten-Modal) wird
die Beschreibung jetzt auch in der Vertragsansicht (Bankkarten-Card)
und im ContractForm-Select angezeigt. Im Select mit
Whitespace-Flatten und 60-Zeichen-Cap, damit lange Notizen den
Select nicht sprengen.
- [x] **🔒 Pentest R104.1 Salutation-Endpunkte: 404 statt 500**
- INFO-Finding: `GET/PUT /api/customers/:id/salutation-preference`
warfen bei nicht-existierendem Customer 500 statt 404.