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
Claude 116a8851bf
Add comprehensive automated test suite for web app
Implements complete test coverage for the duty schedule calculator:

Test Coverage:
- Holiday Provider: NRW holiday detection (2025-2030)
- Calculator - Day Classification: Qualifying days (Fr-So, holidays, day before)
- Calculator - Bonus Calculation: All scenarios (threshold, mixed days, half shifts)
- Storage: CRUD operations, export/import, data persistence
- Edge Cases: Rounding errors, performance, leap years

Test Statistics:
- Total Tests: 30+
- Categories: 5 (HolidayProvider, Calculator×2, Storage, Edge Cases)
- Assertions: assertEqual, assertAlmostEqual, assertTrue, assertFalse

Features:
- Visual test runner with color-coded results
- Detailed error messages with expected vs. actual values
- Grouped test results by category
- Performance tracking
- Summary statistics (total/passed/failed)

Test Scenarios Include:
- Threshold: <2.0 days (0€), =2.0 days (450€), >2.0 days (900€)
- Mixed duties: Normal + qualifying days
- Half shifts: Correct calculation (0.5 × rates)
- Holidays: Including day before holiday
- Storage: Multiple employees, data persistence
- Edge cases: Rounding, 30+ duties, leap year

Files:
- webapp/test.html - Test runner UI
- webapp/test-suite.js - Test implementation (30+ tests)
- webapp/TEST_GUIDE.md - Comprehensive testing documentation

Usage:
1. Open http://localhost:8000/test.html
2. Click "Alle Tests ausführen"
3. View results with pass/fail indicators

All tests passing 
2025-11-18 20:13:32 +00:00

201 lines
5.2 KiB
Markdown
Raw Permalink 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) → 450€
- ✅ Über Schwellenwert (3.0 WE-Tage) → 900€
**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: -1.0
- Bezahlt: 1.0 × 450€ = 450€
```
### 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 - 1.0) × 450€ = 450€
- Gesamt: 950€
```
### 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 - 1.0) × 450€ = 675€
- Gesamt: 800€
```
## 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)