# 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