# 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) ```