From 86a73f2c1692a76492779fc2333829d915cfcc6d Mon Sep 17 00:00:00 2001 From: elpatron Date: Wed, 1 Oct 2025 13:17:55 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20Umfassende=20Blackbox-Test-Checkliste?= =?UTF-8?q?=20f=C3=BCr=20Statusseite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- docs/test-checkliste-statusseite.md | 362 ++++++++++++++++++++++++++++ 1 file changed, 362 insertions(+) create mode 100644 docs/test-checkliste-statusseite.md diff --git a/docs/test-checkliste-statusseite.md b/docs/test-checkliste-statusseite.md new file mode 100644 index 0000000..3b73afe --- /dev/null +++ b/docs/test-checkliste-statusseite.md @@ -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) +``` +