From ace4090bc621a8b3edbc824dec7e94378e3615e1 Mon Sep 17 00:00:00 2001 From: "matthias.lotz" Date: Sat, 8 Nov 2025 13:22:45 +0100 Subject: [PATCH] docs: Add comprehensive testing guide for cleanup feature --- TESTING-CLEANUP.md | 323 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 TESTING-CLEANUP.md diff --git a/TESTING-CLEANUP.md b/TESTING-CLEANUP.md new file mode 100644 index 0000000..f8c11a7 --- /dev/null +++ b/TESTING-CLEANUP.md @@ -0,0 +1,323 @@ +# 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