- 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.
324 lines
8.7 KiB
Markdown
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
|