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:
362
docs/test-checkliste-statusseite.md
Normal file
362
docs/test-checkliste-statusseite.md
Normal 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)
|
||||
```
|
||||
|
Reference in New Issue
Block a user