# Testing Guide: Automatisches Löschen von nicht-freigegebenen Gruppen

Dieses Dokument beschreibt, wie du das Feature "Automatisches Löschen von nicht-freigegebenen Gruppen nach 7 Tagen" testen kannst.

## Übersicht

Das System löscht automatisch alle Gruppen, die nach 7 Tagen nicht freigegeben wurden. Der Cleanup läuft täglich um 10:00 Uhr (Europe/Berlin).

## Voraussetzungen

- Dev-Umgebung läuft (`./dev.sh`)
- Backend erreichbar auf http://localhost:5001
- Frontend erreichbar auf http://localhost:3000

## Test-Tools

### 1. Bash-Script (empfohlen)

Das einfachste Tool zum Testen:

```bash
./test-cleanup.sh
```

**Menü-Optionen:**
1. **Zeige nicht-freigegebene Gruppen** - Übersicht mit Alter in Tagen
2. **Gruppe zurückdatieren** - Upload-Datum ändern für Tests
3. **Preview** - Zeige welche Gruppen gelöscht würden (Dry-Run)
4. **Cleanup ausführen** - Führe Löschung jetzt manuell aus
5. **Lösch-Historie** - Zeige bereits gelöschte Gruppen

### 2. Node.js Script (Alternative)

```bash
node backend/src/scripts/test-cleanup.js
```

Bietet dieselben Funktionen wie das Bash-Script.

### 3. API-Endpunkte (Direkt)

```bash
# Preview: Was würde gelöscht werden?
curl http://localhost:5001/api/admin/cleanup/preview | jq

# Cleanup manuell triggern
curl -X POST http://localhost:5001/api/admin/cleanup/trigger | jq

# Lösch-Historie abrufen
curl http://localhost:5001/api/admin/deletion-log?limit=10 | jq
```

## Test-Szenarien

### Szenario 1: Countdown-Anzeige testen

**Ziel:** Überprüfen, ob der Countdown bei wartenden Gruppen angezeigt wird

1. Lade eine neue Gruppe hoch (über http://localhost:3000)
2. Gehe zu http://localhost:3000/moderation
3. **Erwartung:** Bei der neuen Gruppe siehst du "⏰ 7 Tage bis Löschung"
4. Die Gruppe ist in der Sektion "🔍 Wartende Freigabe"

### Szenario 2: Freigabe testen

**Ziel:** Überprüfen, ob die Freigabe funktioniert und der Countdown verschwindet

1. Gehe zu http://localhost:3000/moderation
2. Klicke bei einer wartenden Gruppe auf "Freigeben"
3. **Erwartung:** 
   - SweetAlert2-Popup: "Gruppe freigegeben"
   - Gruppe wechselt zu "✅ Freigegebene Gruppen"
   - Countdown verschwindet
   - Gruppe wird NICHT mehr gelöscht (egal wie alt)

### Szenario 3: Cleanup simulieren (Gruppe zurückdatieren)

**Ziel:** Eine Gruppe künstlich altern lassen, um Cleanup zu testen

1. Starte Test-Tool:
   ```bash
   ./test-cleanup.sh
   ```

2. Wähle Option **1** - Zeige nicht-freigegebene Gruppen
   - Notiere dir eine Gruppe-ID (z.B. `psvBaKvJn`)

3. Wähle Option **2** - Gruppe zurückdatieren
   - Gib die Gruppe-ID ein: `psvBaKvJn`
   - Gib Tage ein: `8` (älter als 7 Tage)
   - **Erwartung:** "✅ Gruppe wurde um 8 Tage zurückdatiert"

4. Prüfe im Frontend:
   - Gehe zu http://localhost:3000/moderation
   - **Erwartung:** Countdown zeigt negative Zahl oder "0 Tage bis Löschung"

### Szenario 4: Cleanup Preview (Dry-Run)

**Ziel:** Sehen welche Gruppen gelöscht würden, ohne sie zu löschen

1. Starte Test-Tool:
   ```bash
   ./test-cleanup.sh
   ```

2. Wähle Option **3** - Preview
   - **Erwartung:** Liste aller Gruppen, die älter als 7 Tage und nicht freigegeben sind
   - Zeigt Gruppe-ID, Jahr, Name, Upload-Datum, Tage seit Upload

3. Oder direkt via API:
   ```bash
   curl http://localhost:5001/api/admin/cleanup/preview | jq
   ```

### Szenario 5: Cleanup ausführen

**Ziel:** Gruppen tatsächlich löschen

⚠️ **ACHTUNG:** Dies löscht Gruppen permanent!

1. Starte Test-Tool:
   ```bash
   ./test-cleanup.sh
   ```

2. Wähle Option **4** - Cleanup ausführen
3. Bestätige mit `ja`
4. **Erwartung:** 
   - "✅ Cleanup abgeschlossen!"
   - Anzahl gelöschter Gruppen wird angezeigt
   - Backend-Logs zeigen Details:
     ```bash
     docker compose -f docker/dev/docker-compose.yml logs -f backend-dev
     ```

5. Prüfe Ergebnis im Frontend:
   - http://localhost:3000/moderation
   - Scrolle nach unten zum **Lösch-Historie** Bereich
   - **Erwartung:**
     - Statistik-Cards zeigen gelöschte Gruppen/Bilder/Speicher
     - Tabelle zeigt Details der gelöschten Gruppen

### Szenario 6: Lösch-Historie prüfen

**Ziel:** Verifizieren, dass gelöschte Gruppen protokolliert wurden

1. Gehe zu http://localhost:3000/moderation
2. Scrolle zum Bereich **Lösch-Historie** (ganz unten)
3. **Erwartung:**
   - Statistik-Cards zeigen Summen
   - Tabelle zeigt gelöschte Gruppen mit:
     - Gruppe-ID
     - Jahr
     - Anzahl Bilder
     - Upload-Datum
     - Lösch-Datum
     - Grund: "auto_cleanup_7days"
     - Dateigröße

4. Toggle "Alle anzeigen" / "Nur letzte 10" funktioniert

## Manuelle Datenbankprüfung

### Gruppen anzeigen

```bash
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db \
  "SELECT group_id, year, name, approved, datetime(upload_date), 
   CAST((julianday('now') - julianday(upload_date)) AS INTEGER) as days_old 
   FROM groups WHERE approved = 0;"
```

### Deletion Log anzeigen

```bash
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db \
  "SELECT * FROM deletion_log ORDER BY deleted_at DESC LIMIT 5;"
```

### Gruppe manuell zurückdatieren

```bash
# Setze Gruppe auf 8 Tage alt
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db \
  "UPDATE groups SET upload_date = datetime('now', '-8 days') WHERE group_id = 'DEINE_GRUPPE_ID';"
```

## Erwartete Ergebnisse

### ✅ Erfolgreich wenn:

1. **Countdown funktioniert:**
   - Wird bei wartenden Gruppen angezeigt
   - Zeigt korrekte Anzahl Tage
   - Verschwindet nach Freigabe

2. **Freigabe funktioniert:**
   - SweetAlert2-Feedback erscheint
   - Gruppe wechselt Sektion
   - Freigegebene Gruppen werden NIEMALS gelöscht

3. **Cleanup funktioniert:**
   - Nur Gruppen > 7 Tage und nicht freigegeben werden gelöscht
   - Physische Dateien (Original + Preview) werden gelöscht
   - Datenbankeinträge werden entfernt
   - Deletion Log wird erstellt

4. **Lösch-Log funktioniert:**
   - Statistiken korrekt
   - Tabelle zeigt alle gelöschten Gruppen
   - Toggle zwischen "Letzte 10" / "Alle" funktioniert
   - Dateigröße formatiert (KB/MB/GB)

### ❌ Fehler falls:

1. Countdown nicht sichtbar
2. Freigabe ändert Status nicht
3. Freigegebene Gruppen werden gelöscht
4. Gruppen < 7 Tage werden gelöscht
5. Deletion Log bleibt leer
6. Physische Dateien bleiben erhalten
7. Backend-Fehler in Logs

## Cron-Job testen

Der automatische Cleanup läuft täglich um 10:00 Uhr. Zum Testen:

### Option 1: Zeit simulieren (nicht empfohlen)
- Systemzeit ändern
- Container neustarten

### Option 2: Cron-Zeit anpassen (für Tests)

Editiere `backend/src/services/SchedulerService.js`:

```javascript
// Statt '0 10 * * *' (10:00 Uhr täglich)
// Nutze '*/5 * * * *' (alle 5 Minuten)
cron.schedule('*/5 * * * *', async () => {
    await this.cleanupService.performScheduledCleanup();
}, {
    timezone: 'Europe/Berlin'
});
```

Container neustarten und beobachten.

### Option 3: Manuell triggern (empfohlen)

Nutze die Test-Tools (siehe oben), um Cleanup sofort auszuführen.

## Troubleshooting

### Problem: "Module not found: node-cron"

```bash
docker compose -f docker/dev/docker-compose.yml exec backend-dev npm install node-cron
```

### Problem: Cleanup löscht nichts

1. Prüfe ob Gruppen vorhanden und nicht freigegeben:
   ```bash
   ./test-cleanup.sh
   # Option 1
   ```

2. Prüfe ob Gruppen alt genug (> 7 Tage):
   ```bash
   ./test-cleanup.sh
   # Option 3 (Preview)
   ```

3. Datiere Gruppe zurück für Tests:
   ```bash
   ./test-cleanup.sh
   # Option 2
   ```

### Problem: API-Endpunkte nicht erreichbar

1. Prüfe Container-Status:
   ```bash
   docker compose -f docker/dev/docker-compose.yml ps
   ```

2. Prüfe Backend-Logs:
   ```bash
   docker compose -f docker/dev/docker-compose.yml logs -f backend-dev
   ```

3. Prüfe nginx-Konfiguration für `/api/admin` Route

### Problem: Lösch-Log leer im Frontend

1. Prüfe Browser-Konsole auf Fehler
2. Prüfe nginx-Authentifizierung (Passwort)
3. Teste API direkt:
   ```bash
   curl http://localhost:5001/api/admin/deletion-log?limit=10
   ```

## Cleanup nach Tests

Nach dem Testen kannst du die Testdaten löschen:

```bash
# Deletion Log leeren
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db \
  "DELETE FROM deletion_log;"

# Alle nicht-freigegebenen Gruppen löschen
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db \
  "DELETE FROM groups WHERE approved = 0;"
```

## Nächste Schritte

Nach erfolgreichem Testing:
1. Feature-Branch mergen
2. Dokumentation aktualisieren (README.md, CHANGELOG.md)
3. TODO.md aktualisieren
4. Production-Deployment vorbereiten
