This repository has been archived on 2026-06-28. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Dienstplan/webapp/TEST_GUIDE.md
copilot-swe-agent[bot] db6e95f45c Revert deduction value to 2.0 across all files as per user feedback
Co-authored-by: Kenearos <86194771+Kenearos@users.noreply.github.com>
2025-12-12 12:26:34 +00:00

201 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Test Suite - Dienstplan Bonusrechner
Automatische Test Suite für die Web-App.
## Schnellstart
1. **Server starten** (falls noch nicht gestartet):
```bash
cd webapp
python3 -m http.server 8000
```
2. **Test-Seite öffnen**:
```
http://localhost:8000/test.html
```
3. **Tests ausführen**:
- Klicken Sie auf "Alle Tests ausführen"
- Warten Sie auf die Ergebnisse
- ✅ = Test bestanden
- ❌ = Test fehlgeschlagen
## Was wird getestet?
### 1. Holiday Provider (NRW-Feiertage)
- ✅ Feiertage werden korrekt erkannt
- ✅ Normale Tage werden nicht als Feiertage erkannt
- ✅ Tag vor Feiertag wird erkannt
- ✅ Spezifische Feiertage (Fronleichnam, etc.)
### 2. Calculator - Tag-Klassifizierung
- ✅ Freitag ist qualifizierend
- ✅ Samstag ist qualifizierend
- ✅ Sonntag ist qualifizierend
- ✅ Normale Wochentage (Mo-Do) sind nicht qualifizierend
- ✅ Feiertage sind qualifizierend
- ✅ Tag vor Feiertag ist qualifizierend
### 3. Calculator - Bonusberechnung
**Schwellenwert-Tests:**
- ✅ Unter Schwellenwert (1.0 WE-Tag) → 0€
- ✅ Genau Schwellenwert (2.0 WE-Tage) → 0€
- ✅ Über Schwellenwert (3.0 WE-Tage) → 450€
**Gemischte Dienste:**
- ✅ Normale Tage + WE-Tage korrekt berechnet
- ✅ Halbe Dienste korrekt berechnet
- ✅ Feiertag + Vortag-Kombination
**Spezialfälle:**
- ✅ Keine Dienste → 0€
- ✅ 2x halbe Samstage zählen als 1 ganzer Tag
### 4. Storage (Datenverwaltung)
- ✅ Mitarbeiter hinzufügen
- ✅ Doppelte Mitarbeiter werden abgelehnt
- ✅ Mitarbeiter entfernen
- ✅ Dienste hinzufügen und abrufen
- ✅ Dienste aktualisieren (gleicher Tag)
- ✅ Mehrere Mitarbeiter verwalten
- ✅ Export und Import von Daten
### 5. Edge Cases
- ✅ Rundungsfehler bei Schwellenwert
- ✅ Performance bei vielen Diensten (30+ Tage)
- ✅ Schaltjahre (29. Februar)
## Test-Statistiken
Nach dem Durchlauf sehen Sie:
- **Gesamt**: Anzahl aller Tests
- **Bestanden**: Anzahl erfolgreicher Tests
- **Fehlgeschlagen**: Anzahl fehlgeschlagener Tests
## Testfälle im Detail
### Beispiel 1: Schwellenwert genau erreicht
```javascript
Dienste:
- 1× Samstag (1.0)
- 1× Sonntag (1.0)
Erwartung:
- Qualifizierende Tage: 2.0
- Schwellenwert: ✅ Erreicht
- Abzug: -2.0
- Bezahlt: 0.0 × 450€ = 0€
```
### Beispiel 2: Gemischte Dienste
```javascript
Dienste:
- 2× Montag (2.0 normale Tage)
- 2× Samstag (2.0 qualifizierende Tage)
Erwartung:
- Normale Tage: 2.0 × 250€ = 500€
- Qualifizierende Tage: (2.0 - 2.0) × 450€ = 0€
- Gesamt: 500€
```
### Beispiel 3: Halbe Dienste
```javascript
Dienste:
- 1× Montag halber Dienst (0.5)
- 1× Samstag halber Dienst (0.5)
- 1× Sonntag ganzer Dienst (1.0)
- 1× Freitag ganzer Dienst (1.0)
Erwartung:
- Normale Tage: 0.5 × 250€ = 125€
- Qualifizierende Tage: (2.5 - 2.0) × 450€ = 225€
- Gesamt: 350€
```
## Tests erweitern
Um einen neuen Test hinzuzufügen, bearbeiten Sie `test-suite.js`:
```javascript
runner.test('Testname', (t) => {
// Setup
const calculator = new BonusCalculator(new HolidayProvider());
const duties = [
{ date: new Date('2025-11-22T12:00:00'), share: 1.0 }
];
// Ausführung
const result = calculator.calculateMonthlyBonus(duties);
// Assertions
t.assertEqual(result.totalBonus, 0, 'Erwarteter Bonus');
t.assertTrue(result.thresholdReached, 'Schwelle erreicht');
});
```
### Verfügbare Assertions
- `assertEqual(actual, expected, message)` - Exakte Gleichheit
- `assertAlmostEqual(actual, expected, tolerance, message)` - Ungefähre Gleichheit (für Fließkommazahlen)
- `assertTrue(value, message)` - Wert sollte true sein
- `assertFalse(value, message)` - Wert sollte false sein
## Troubleshooting
### Tests schlagen fehl
1. Prüfen Sie die Fehlermeldung (wird rot angezeigt)
2. Überprüfen Sie die erwarteten vs. erhaltenen Werte
3. Testen Sie die Funktion manuell in der Haupt-App
### Performance-Probleme
- Die Test Suite sollte in < 1 Sekunde durchlaufen
- Bei Verzögerungen: Browser-Konsole prüfen (F12)
### LocalStorage-Konflikte
- Tests verwenden die gleiche LocalStorage-Instanz wie die Haupt-App
- Bei Problemen: LocalStorage im Browser löschen
- Oder: Tests in Inkognito-Modus ausführen
## Continuous Integration
Die Tests können auch automatisiert mit Headless-Browsern ausgeführt werden:
```bash
# Mit Playwright
npx playwright test
# Mit Puppeteer
node run-tests-headless.js
```
(Erfordert zusätzliche Setup-Schritte)
## Test-Abdeckung
Aktuelle Abdeckung:
- **Feiertage**: 100% (alle NRW-Feiertage getestet)
- **Tag-Klassifizierung**: 100% (alle Wochentage + Feiertage)
- **Bonusberechnung**: ~95% (Hauptszenarien + Edge Cases)
- **Storage**: ~90% (CRUD-Operationen)
- **UI**: 0% (keine UI-Tests, nur Logik)
## Bekannte Limitierungen
1. **Keine UI-Tests**: Nur Logik-Tests, keine Interaktions-Tests
2. **Browser-abhängig**: LocalStorage-Tests funktionieren nur im Browser
3. **Keine Netzwerk-Tests**: Kein Server-seitiger Code
4. **Zeitzone**: Tests gehen von deutscher Zeitzone aus
## Best Practices
1. **Tests vor Änderungen ausführen**: Sicherstellen, dass alles funktioniert
2. **Nach Änderungen erneut testen**: Regression verhindern
3. **Neue Features = Neue Tests**: Test-first development
4. **Tests dokumentieren**: Klare Namen und Kommentare
## Lizenz
MIT (wie Hauptprojekt)