Project-Image-Uploader/tests/TESTING-CLEANUP.md
matthias.lotz 4ee1b76d77 docs: Finalize automatic cleanup feature documentation
- 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.
2025-11-08 14:45:13 +01:00

324 lines
8.7 KiB
Markdown

# 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