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

5.2 KiB
Raw Blame History

Test Suite - Dienstplan Bonusrechner

Automatische Test Suite für die Web-App.

Schnellstart

  1. Server starten (falls noch nicht gestartet):

    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

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

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

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:

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:

# 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)