docs: Umfassende Blackbox-Test-Checkliste für Statusseite

- 16 Hauptkategorien mit >150 Testfällen
- Alle Status-Typen abgedeckt (pending/confirmed/cancelled/completed)
- E-Mail-Integration und ICS-Dateien
- Stornierungslogik und Zeitvalidierung
- UI/UX, Performance und Accessibility
- Sicherheit und Edge Cases
- Browser-Kompatibilität
- Testergebnis-Bereich für Dokumentation
This commit is contained in:
2025-10-01 13:17:55 +02:00
parent 85fcde0805
commit 86a73f2c16

View File

@@ -0,0 +1,362 @@
# Blackbox Test-Checkliste: Kunden-Statusseite
**Branch:** `Statusseite`
**Feature:** Token-basierte Buchungsübersicht mit integrierter Stornierung
**Datum:** 2025-10-01
## Vorbereitung
- [ ] Entwicklungsserver läuft (`pnpm dev`)
- [ ] E-Mail-Service konfiguriert (RESEND_API_KEY gesetzt)
- [ ] Admin-Account verfügbar
- [ ] Testbehandlungen vorhanden
- [ ] Verfügbare Slots erstellt
---
## 1. Buchungserstellung & Token-Generierung
### 1.1 Neue Buchung (Status: pending)
- [ ] Buchung über Formular erstellen
- [ ] Pending-E-Mail erhalten
- [ ] Status-Link (`/booking/{token}`) in E-Mail vorhanden
- [ ] Button "Status ansehen" vorhanden und korrekt verlinkt
- [ ] Link funktioniert beim Klick
### 1.2 Token-Validierung
- [ ] Gültiger Token öffnet Statusseite
- [ ] Ungültiger Token zeigt Fehlermeldung
- [ ] Abgelaufener Token zeigt entsprechende Meldung
- [ ] Token ohne Parameter zeigt Fehler
---
## 2. Statusseite UI/UX (Allgemein)
### 2.1 Layout & Design
- [ ] Logo wird angezeigt
- [ ] Seite ist responsive (Desktop, Tablet, Mobile)
- [ ] Alle Texte sind auf Deutsch
- [ ] Farben entsprechen dem Branding (Pink/Purple)
- [ ] "Zurück zur Startseite" Link funktioniert
### 2.2 Navigation
- [ ] Link zur Startseite funktioniert
- [ ] Browser-Zurück-Button funktioniert korrekt
- [ ] URL ist teilbar (Copy & Paste)
---
## 3. Status: Pending (⏳ Wartet auf Bestätigung)
### 3.1 Anzeige
- [ ] Status-Badge zeigt "⏳ Wartet auf Bestätigung" (gelb)
- [ ] Banner mit gelber Hintergrundfarbe
- [ ] Text erklärt, dass Termin geprüft wird
- [ ] Alle Termin-Details werden angezeigt:
- [ ] Datum (Format: dd.mm.yyyy)
- [ ] Uhrzeit
- [ ] Behandlung
- [ ] Dauer in Minuten
- [ ] Preis (wenn > 0)
- [ ] Kundendaten werden angezeigt:
- [ ] Name
- [ ] E-Mail
- [ ] Telefon
- [ ] Notizen (falls vorhanden)
### 3.2 Stornierung
- [ ] Stornierungsbereich ist NICHT sichtbar (pending kann nicht storniert werden)
- [ ] Keine Stornierungsbuttons vorhanden
---
## 4. Status: Confirmed (✓ Bestätigt)
### 4.1 Statuswechsel
- [ ] Admin bestätigt Buchung
- [ ] Confirmed-E-Mail wird versendet
- [ ] E-Mail enthält "Termin verwalten" Button
- [ ] Link in E-Mail zeigt auf `/booking/{token}`
- [ ] ICS-Datei ist im E-Mail-Anhang
- [ ] AGB-PDF ist im E-Mail-Anhang
### 4.2 Anzeige
- [ ] Status-Badge zeigt "✓ Bestätigt" (grün)
- [ ] Banner mit grüner Hintergrundfarbe
- [ ] Text bestätigt den Termin
- [ ] "Verbleibende Zeit" wird angezeigt (wenn Zukunft)
- [ ] Stunden bis zum Termin werden berechnet und angezeigt
### 4.3 Stornierung (wenn möglich)
- [ ] Stornierungsbereich ist sichtbar
- [ ] Hinweistext zur Stornierungsfrist wird angezeigt
- [ ] Button "Termin stornieren" ist vorhanden
- [ ] Klick auf Button zeigt Bestätigungsdialog
- [ ] Bestätigungsdialog enthält:
- [ ] Warnhinweis in rot
- [ ] "Ja, stornieren" Button
- [ ] "Abbrechen" Button
- [ ] "Abbrechen" schließt Dialog ohne Aktion
- [ ] "Ja, stornieren" führt Stornierung durch
- [ ] Nach Stornierung: Erfolgsmeldung wird angezeigt
- [ ] Nach Stornierung: Status aktualisiert sich
### 4.4 Stornierung (nicht mehr möglich)
- [ ] Termin < 24h (oder MIN_STORNO_TIMESPAN): Kein Stornierungsbutton
- [ ] Gelber Hinweiskasten wird angezeigt
- [ ] Text erklärt, dass Frist abgelaufen ist
- [ ] Kontakthinweis wird angezeigt
---
## 5. Status: Cancelled (✕ Storniert)
### 5.1 Nach Stornierung
- [ ] Status-Badge zeigt "✕ Storniert" (rot)
- [ ] Banner mit roter Hintergrundfarbe
- [ ] Text erklärt, dass Termin storniert wurde
- [ ] Hinweis auf Neubuchung wird angezeigt
- [ ] Stornierungsbereich ist nicht mehr sichtbar
### 5.2 Cancelled-E-Mail
- [ ] E-Mail wird an Kunden gesendet
- [ ] E-Mail enthält storniertes Datum
- [ ] E-Mail enthält Hinweis auf Neubuchung
---
## 6. Status: Completed (✓ Abgeschlossen)
### 6.1 Anzeige
- [ ] Status-Badge zeigt "✓ Abgeschlossen" (grau)
- [ ] Banner mit grauer Hintergrundfarbe
- [ ] Dankestext wird angezeigt
- [ ] Stornierungsbereich ist nicht sichtbar
- [ ] Alle Termin-Details bleiben sichtbar
---
## 7. E-Mail-Integration
### 7.1 Pending-Mail
- [ ] Betreff: "Deine Terminanfrage ist eingegangen"
- [ ] Enthält orangefarbenen "Status ansehen" Button
- [ ] Link funktioniert
- [ ] Text erklärt, dass Bestätigung folgt
- [ ] Rechtliche Informationen enthalten
### 7.2 Confirmed-Mail
- [ ] Betreff: "Dein Termin wurde bestätigt - AGB im Anhang"
- [ ] Enthält pinken "Termin ansehen & verwalten" Button (statt rot "Termin stornieren")
- [ ] Link zeigt auf `/booking/{token}`
- [ ] ICS-Datei im Anhang
- [ ] ICS-Datei hat korrekten Namen: "Termin_Stargirlnails.ics"
- [ ] ICS-Datei kann in Kalender importiert werden
- [ ] AGB-PDF im Anhang
- [ ] AGB-PDF heißt "AGB_Stargirlnails_Kiel.pdf"
### 7.3 Cancelled-Mail
- [ ] Betreff: "Dein Termin wurde abgesagt"
- [ ] Text erklärt Stornierung
- [ ] Hinweis auf Neubuchung
- [ ] Rechtliche Informationen enthalten
---
## 8. ICS-Kalendereinträge
### 8.1 ICS-Datei Inhalt
- [ ] Zeitzone: Europe/Berlin
- [ ] Startzeit korrekt
- [ ] Endzeit korrekt (Startzeit + Behandlungsdauer)
- [ ] Titel: "{Behandlung} - Stargirlnails Kiel"
- [ ] Location: "Stargirlnails Kiel"
- [ ] Beschreibung enthalten
- [ ] 24h-Erinnerung konfiguriert
### 8.2 Kalender-Import
- [ ] Outlook: Import funktioniert
- [ ] Google Calendar: Import funktioniert (wenn möglich zu testen)
- [ ] Apple Calendar: Import funktioniert (wenn möglich zu testen)
- [ ] Termin erscheint im Kalender mit korrekter Zeit
- [ ] Erinnerung wird 24h vorher ausgelöst
---
## 9. Stornierungslogik
### 9.1 Zeitbasierte Validierung
- [ ] Termin > 24h in Zukunft: Stornierung möglich
- [ ] Termin < 24h in Zukunft: Stornierung nicht möglich
- [ ] Termin in Vergangenheit: Stornierung nicht möglich
- [ ] Korrekte Berechnung der verbleibenden Stunden
### 9.2 Statusbasierte Validierung
- [ ] Status "pending": Keine Stornierung möglich
- [ ] Status "confirmed": Stornierung möglich (wenn Zeitfrist OK)
- [ ] Status "cancelled": Keine Stornierung möglich
- [ ] Status "completed": Keine Stornierung möglich
### 9.3 Stornierungsablauf
- [ ] Bestätigungsdialog erscheint
- [ ] Loading-Spinner während Stornierung
- [ ] Erfolgsmeldung nach Stornierung
- [ ] Fehlermeldung bei Fehler
- [ ] Token wird NICHT invalidiert nach Stornierung
- [ ] Slot wird wieder freigegeben
- [ ] Status aktualisiert sich auf Seite
---
## 10. Fehlerbehandlung
### 10.1 Ungültige Token
- [ ] Nicht existierender Token: Fehlermeldung
- [ ] Abgelaufener Token: Fehlermeldung
- [ ] Leerer Token: Fehlermeldung
- [ ] Fehlermeldung ist benutzerfreundlich (Deutsch)
### 10.2 Netzwerkfehler
- [ ] API nicht erreichbar: Fehlermeldung
- [ ] Timeout: Fehlermeldung
- [ ] Fehler während Stornierung: Fehlermeldung bleibt sichtbar
### 10.3 Validierungsfehler
- [ ] Stornierung außerhalb Frist: Klare Fehlermeldung
- [ ] Bereits stornierter Termin: Fehlermeldung
---
## 11. Performance & Ladezeiten
- [ ] Statusseite lädt in < 2 Sekunden
- [ ] Keine sichtbaren Layout-Shifts
- [ ] Loading-Spinner wird während Laden angezeigt
- [ ] Bilder werden optimiert geladen
- [ ] Keine JavaScript-Fehler in Browser-Console
---
## 12. Accessibility & Browser-Kompatibilität
### 12.1 Accessibility
- [ ] Buttons sind mit Tastatur erreichbar
- [ ] Fokus-Indikatoren sind sichtbar
- [ ] Farbkontraste sind ausreichend (WCAG AA)
- [ ] Alt-Texte für Bilder vorhanden
### 12.2 Browser
- [ ] Chrome (aktuell): Funktioniert
- [ ] Firefox (aktuell): Funktioniert
- [ ] Safari (wenn möglich): Funktioniert
- [ ] Edge (aktuell): Funktioniert
- [ ] Mobile Browser (iOS/Android): Funktioniert
### 12.3 Responsive Design
- [ ] Desktop (>1024px): Layout korrekt
- [ ] Tablet (768px-1024px): Layout korrekt
- [ ] Mobile (320px-767px): Layout korrekt
- [ ] Touch-Targets ausreichend groß (min. 44x44px)
---
## 13. Sicherheit
### 13.1 Token-Sicherheit
- [ ] Token ist ausreichend lang (UUID)
- [ ] Token ist nicht vorhersagbar
- [ ] Token läuft nach 30 Tagen ab
- [ ] Abgelaufene Token werden abgelehnt
### 13.2 Datenschutz
- [ ] Keine sensiblen Daten in URLs außer Token
- [ ] Keine Kundendaten in Browser-Console geloggt
- [ ] E-Mail-Adressen werden nicht im Klartext im HTML angezeigt
- [ ] Telefonnummern geschützt
---
## 14. Rückwärts-Kompatibilität
### 14.1 Legacy-Routen
- [ ] `/cancel/{token}` funktioniert NICHT (bewusst entfernt)
- [ ] Alte Links in E-Mails zeigen auf neue Route
- [ ] Bestehende Tokens funktionieren weiterhin
### 14.2 Datenbank-Kompatibilität
- [ ] Alte Buchungen werden korrekt angezeigt
- [ ] Alte Tokens funktionieren mit neuem Code
- [ ] Migration ist nicht erforderlich
---
## 15. Edge Cases
### 15.1 Extremwerte
- [ ] Sehr lange Behandlungsnamen werden korrekt dargestellt
- [ ] Sehr lange Notizen werden korrekt dargestellt
- [ ] Sehr hohe Preise werden korrekt formatiert
- [ ] Termin weit in Zukunft (> 30 Tage): Token abgelaufen
### 15.2 Sonderfälle
- [ ] Termin heute um 23:59: Stornierungsfrist korrekt berechnet
- [ ] Termin während Sommerzeit/Winterzeit-Wechsel: Korrekt
- [ ] Mehrere Buchungen desselben Kunden: Jede hat eigenen Token
- [ ] Gleichzeitiger Zugriff auf Statusseite: Kein Konflikt
---
## 16. Integration mit bestehendem System
### 16.1 Admin-Panel
- [ ] Buchungen werden im Admin-Panel angezeigt
- [ ] Statusänderungen im Admin-Panel reflektieren sich auf Statusseite
- [ ] Admin erhält weiterhin E-Mail-Benachrichtigungen
### 16.2 Slot-Management
- [ ] Stornierung gibt Slot frei
- [ ] Freigegebener Slot ist sofort buchbar
- [ ] Keine Slot-Konflikte
### 16.3 E-Mail-System
- [ ] E-Mails werden zuverlässig versendet
- [ ] Anhänge werden korrekt zugestellt
- [ ] CC an Admin funktioniert (bei confirmed)
---
## Testergebnisse
**Getestet von:** _________________
**Datum:** _________________
**Browser/Gerät:** _________________
### Kritische Fehler (Blocker)
```
(Hier kritische Fehler eintragen, die Release verhindern)
```
### Mittelschwere Fehler
```
(Hier mittelschwere Fehler eintragen, die behoben werden sollten)
```
### Kleinere Probleme
```
(Hier kleinere Verbesserungsvorschläge eintragen)
```
### Gesamtbewertung
- [ ] ✅ Alle Tests bestanden - Release-fähig
- [ ] ⚠️ Tests bestanden mit kleineren Problemen
- [ ] ❌ Kritische Fehler gefunden - Nachbesserung erforderlich
---
## Notizen
```
(Hier zusätzliche Beobachtungen und Anmerkungen eintragen)
```