# 🧪 Quick Testing Guide

Schnelle Tests aller neuen Features.

## Web-Seiten (Browser)

### 1. Registrierung testen
```
1. Öffnen Sie http://localhost:8000/register
2. Füllen Sie das Formular aus:
   - Name: "Test User"
   - Email: "test@example.com"
   - Passwort: "TestPass123"
   - Passwort wiederholen: "TestPass123"
3. Klicken Sie "Registrieren"
4. Sie sollten zur Startseite umgeleitet werden
5. Öffnen Sie Browser Console → Application → Cookies
6. Der auth_token sollte gespeichert sein
```

### 2. Anmeldung testen
```
1. Öffnen Sie http://localhost:8000/login
2. Geben Sie ein:
   - Email: test@example.com
   - Passwort: TestPass123
3. Klicken Sie "Anmelden"
4. Sie sollten zur Startseite umgeleitet werden
5. Token wird in localStorage gespeichert
```

### 3. Passwort vergessen testen
```
1. Öffnen Sie http://localhost:8000/login
2. Klicken Sie "Passwort vergessen?"
3. Geben Sie Ihre Email ein: test@example.com
4. Klicken Sie "Token anfordern"
5. Ein Token wird in der Info-Box angezeigt
6. Kopieren Sie den Token
7. Klicken Sie "Zum Zurücksetzen klicken"
8. Geben Sie ein:
   - Passwort: NewPass123
   - Passwort wiederholen: NewPass123
9. Klicken Sie "Passwort zurücksetzen"
10. Sie werden zur Anmeldungsseite umgeleitet
11. Melden Sie sich mit NewPass123 an
```

## API Tests (Terminal)

### 1. Login-Test
```bash
curl -X POST http://localhost:8000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"password123"}'
```
Erwartet: 200 OK mit Token

### 2. User Profile
```bash
TOKEN="1|l5z3Had9t8AiOnP2gAQZ4yb4QcbfZcs3UQihqVNib46e5d77"
curl -X GET http://localhost:8000/api/user/profile \
  -H "Authorization: Bearer $TOKEN"
```
Erwartet: 200 OK mit Benutzerprofil

### 3. User Stats
```bash
curl -X GET http://localhost:8000/api/user/stats \
  -H "Authorization: Bearer $TOKEN"
```
Erwartet: 200 OK mit Statistiken

### 4. User Favorites
```bash
curl -X GET http://localhost:8000/api/user/favorites \
  -H "Authorization: Bearer $TOKEN"
```
Erwartet: 200 OK mit paginierten Events

### 5. Toggle Favorite
```bash
curl -X POST http://localhost:8000/api/user/favorites/1/toggle \
  -H "Authorization: Bearer $TOKEN"
```
Erwartet: 200 OK mit is_favorite Flag

### 6. Forgot Password
```bash
curl -X POST http://localhost:8000/api/auth/forgot-password \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com"}'
```
Erwartet: 200 OK mit Token

### 7. Verify Reset Token
```bash
TOKEN="xyz123"
curl -X POST http://localhost:8000/api/auth/verify-reset-token \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","token":"'$TOKEN'"}'
```
Erwartet: 200 OK mit valid:true

### 8. Reset Password
```bash
TOKEN="xyz123"
curl -X POST http://localhost:8000/api/auth/reset-password \
  -H "Content-Type: application/json" \
  -d '{
    "email":"user@example.com",
    "token":"'$TOKEN'",
    "password":"newPassword123",
    "password_confirmation":"newPassword123"
  }'
```
Erwartet: 200 OK mit Success-Meldung

## Fehlertest

### 1. Ungültige Email
```bash
curl -X POST http://localhost:8000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"nonexistent@example.com","password":"password123"}'
```
Erwartet: 401 Unauthorized

### 2. Falsches Passwort
```bash
curl -X POST http://localhost:8000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"wrongpassword"}'
```
Erwartet: 401 Unauthorized

### 3. Abgelaufener Token
```bash
curl -X POST http://localhost:8000/api/auth/verify-reset-token \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","token":"expired-token-from-1-hour-ago"}'
```
Erwartet: 422 Unprocessable Entity

### 4. Passwörter stimmen nicht überein
```bash
curl -X POST http://localhost:8000/api/auth/reset-password \
  -H "Content-Type: application/json" \
  -d '{
    "email":"user@example.com",
    "token":"valid-token",
    "password":"newPassword123",
    "password_confirmation":"differentPassword123"
  }'
```
Erwartet: 422 Validation Error

## Demo-Benutzer

Die folgenden Benutzer sind nach `php artisan migrate:fresh --seed` verfügbar:

```
Email: user@example.com
Password: password123
Role: user

Email: organizer@example.com
Password: password123
Role: organizer

Email: admin@example.com
Password: password123
Role: admin
```

## Datenbank Reset

Wenn Sie die Datenbank zurücksetzen möchten:

```bash
cd /Users/meinholdc/Entwicklung/Veranstaltungen-APP
php artisan migrate:fresh --seed
```

Dies:
- Löscht alle Tabellen
- Führt alle Migrationen erneut aus
- Lädt Seeders (erstellt Demo-Benutzer und Events)

## Browser DevTools Tipps

### Tokens anzeigen
```javascript
// Öffnen Sie Console und geben Sie ein:
localStorage.getItem('auth_token')
localStorage.getItem('user')

// Token setzen (für manuelles Testen)
localStorage.setItem('auth_token', 'TOKEN_HERE')
```

### Netzwerk-Requests debugging
1. Öffnen Sie F12 → Network Tab
2. Aktualisieren Sie die Seite
3. Klicken Sie auf einen Request
4. Schauen Sie sich die Response an
5. Mit "Pretty Print" JSON formatieren

## Häufige Probleme

### Problem: 500 Error beim Login
**Lösung**: Datenbank migrieren
```bash
php artisan migrate:fresh --seed
```

### Problem: "Table personal_access_tokens doesn't exist"
**Lösung**: Personal Access Tokens Migration laufen lassen
```bash
php artisan migrate
```

### Problem: Token funktioniert nicht
**Lösung**: Token muss im Format `id|token` sein
```bash
# Richtig:
curl -X GET http://localhost:8000/api/user/profile \
  -H "Authorization: Bearer 1|l5z3Had9t8AiOnP2gAQZ4yb4QcbfZcs3UQihqVNib46e5d77"

# Falsch:
curl -X GET http://localhost:8000/api/user/profile \
  -H "Authorization: Bearer l5z3Had9t8AiOnP2gAQZ4yb4QcbfZcs3UQihqVNib46e5d77"
```

### Problem: CORS Fehler
**Lösung**: CORS ist bereits konfiguriert. Wenn Sie noch Fehler sehen:
1. Browser Console öffnen
2. Netzwerk-Request anschauen
3. Response Headers prüfen auf `Access-Control-Allow-*`

## Performance-Tipps

### Pagination nutzen
```bash
# Seite 2 mit 20 Items pro Seite
curl -X GET "http://localhost:8000/api/user/favorites?page=2&per_page=20" \
  -H "Authorization: Bearer $TOKEN"
```

### N+1 Query Problem vermeiden
Alle Endpunkte verwenden bereits `->with()` für Eager Loading:
- `/api/user/favorites` lädt `location`, `occurrences`, `source`
- `/api/user/events` lädt `location`, `occurrences`, `source`

Keine zusätzlichen Queries nötig!

## SSL/HTTPS

Wenn Sie HTTPS testen möchten:
```bash
php artisan serve --port=8000 --host=localhost --cert
```

Oder verwenden Sie ngrok für öffentliche HTTPS-URLs:
```bash
ngrok http 8000
```

---

**Viel Spaß beim Testen!** 🚀
