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

