- Update README.md with comprehensive feature description - Add automatic cleanup and deletion log to features list - Document countdown display and 7-day retention policy - Add Testing section with test-cleanup.sh instructions - Update API endpoints with new admin routes - Update CHANGELOG.md with complete feature overview - Backend: Services, Repositories, Scheduler, API endpoints - Frontend: DeletionLogSection, countdown, SweetAlert2 feedback - Infrastructure: nginx config updates - Testing: Comprehensive test tools and documentation - Update TODO.md marking feature as completed - Update FEATURE_PLAN with final status - All 11 tasks completed (100%) - Bug fixes documented - Deployment checklist updated - Final timeline and statistics - Organize test files into tests/ directory - Move TESTING-CLEANUP.md to tests/ - Move test-cleanup.sh to tests/ Feature is now complete and ready for merge.
8.7 KiB
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:
./test-cleanup.sh
Menü-Optionen:
- Zeige nicht-freigegebene Gruppen - Übersicht mit Alter in Tagen
- Gruppe zurückdatieren - Upload-Datum ändern für Tests
- Preview - Zeige welche Gruppen gelöscht würden (Dry-Run)
- Cleanup ausführen - Führe Löschung jetzt manuell aus
- Lösch-Historie - Zeige bereits gelöschte Gruppen
2. Node.js Script (Alternative)
node backend/src/scripts/test-cleanup.js
Bietet dieselben Funktionen wie das Bash-Script.
3. API-Endpunkte (Direkt)
# 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
- Lade eine neue Gruppe hoch (über http://localhost:3000)
- Gehe zu http://localhost:3000/moderation
- Erwartung: Bei der neuen Gruppe siehst du "⏰ 7 Tage bis Löschung"
- Die Gruppe ist in der Sektion "🔍 Wartende Freigabe"
Szenario 2: Freigabe testen
Ziel: Überprüfen, ob die Freigabe funktioniert und der Countdown verschwindet
- Gehe zu http://localhost:3000/moderation
- Klicke bei einer wartenden Gruppe auf "Freigeben"
- 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
-
Starte Test-Tool:
./test-cleanup.sh -
Wähle Option 1 - Zeige nicht-freigegebene Gruppen
- Notiere dir eine Gruppe-ID (z.B.
psvBaKvJn)
- Notiere dir eine Gruppe-ID (z.B.
-
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"
- Gib die Gruppe-ID ein:
-
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
-
Starte Test-Tool:
./test-cleanup.sh -
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
-
Oder direkt via API:
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!
-
Starte Test-Tool:
./test-cleanup.sh -
Wähle Option 4 - Cleanup ausführen
-
Bestätige mit
ja -
Erwartung:
- "✅ Cleanup abgeschlossen!"
- Anzahl gelöschter Gruppen wird angezeigt
- Backend-Logs zeigen Details:
docker compose -f docker/dev/docker-compose.yml logs -f backend-dev
-
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
-
Gehe zu http://localhost:3000/moderation
-
Scrolle zum Bereich Lösch-Historie (ganz unten)
-
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
-
Toggle "Alle anzeigen" / "Nur letzte 10" funktioniert
Manuelle Datenbankprüfung
Gruppen anzeigen
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
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
# 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:
-
Countdown funktioniert:
- Wird bei wartenden Gruppen angezeigt
- Zeigt korrekte Anzahl Tage
- Verschwindet nach Freigabe
-
Freigabe funktioniert:
- SweetAlert2-Feedback erscheint
- Gruppe wechselt Sektion
- Freigegebene Gruppen werden NIEMALS gelöscht
-
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
-
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:
- Countdown nicht sichtbar
- Freigabe ändert Status nicht
- Freigegebene Gruppen werden gelöscht
- Gruppen < 7 Tage werden gelöscht
- Deletion Log bleibt leer
- Physische Dateien bleiben erhalten
- 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:
// 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"
docker compose -f docker/dev/docker-compose.yml exec backend-dev npm install node-cron
Problem: Cleanup löscht nichts
-
Prüfe ob Gruppen vorhanden und nicht freigegeben:
./test-cleanup.sh # Option 1 -
Prüfe ob Gruppen alt genug (> 7 Tage):
./test-cleanup.sh # Option 3 (Preview) -
Datiere Gruppe zurück für Tests:
./test-cleanup.sh # Option 2
Problem: API-Endpunkte nicht erreichbar
-
Prüfe Container-Status:
docker compose -f docker/dev/docker-compose.yml ps -
Prüfe Backend-Logs:
docker compose -f docker/dev/docker-compose.yml logs -f backend-dev -
Prüfe nginx-Konfiguration für
/api/adminRoute
Problem: Lösch-Log leer im Frontend
- Prüfe Browser-Konsole auf Fehler
- Prüfe nginx-Authentifizierung (Passwort)
- Teste API direkt:
curl http://localhost:5001/api/admin/deletion-log?limit=10
Cleanup nach Tests
Nach dem Testen kannst du die Testdaten löschen:
# 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:
- Feature-Branch mergen
- Dokumentation aktualisieren (README.md, CHANGELOG.md)
- TODO.md aktualisieren
- Production-Deployment vorbereiten