"""Tests für die Prämienberechnung.""" from decimal import Decimal import pytest from src.praemie import berechne_praemie def test_grundfall(): """SF-Klasse 0 ohne Altersnachlass ergibt den vollen Grundbeitrag.""" assert berechne_praemie(0, 3) == Decimal("480.00") def test_sf_rabatt(): """SF-Klasse 5 gewährt 40 Prozent Nachlass.""" assert berechne_praemie(5, 3) == Decimal("288.00") def test_altersnachlass(): """Fahrzeuge über zehn Jahre erhalten zusätzlich zehn Prozent.""" assert berechne_praemie(5, 12) == Decimal("259.20") def test_unbekannte_sf_klasse(): """Nicht hinterlegte SF-Klassen fallen auf den Standardfaktor zurück.""" assert berechne_praemie(7, 3) == Decimal("240.00") def test_negative_sf_klasse_wirft_fehler(): """Negative SF-Klassen sind fachlich unmöglich.""" with pytest.raises(ValueError, match="negativ"): berechne_praemie(-1, 3) @pytest.mark.parametrize( "sf,alter,erwartet", [ (0, 0, "480.00"), (1, 0, "408.00"), (10, 0, "192.00"), (10, 15, "172.80"), ], ) def test_verschiedene_kombinationen(sf, alter, erwartet): """Prüft mehrere Kombinationen in einem Durchlauf.""" assert berechne_praemie(sf, alter) == Decimal(erwartet) def test_ergebnis_hat_zwei_nachkommastellen(): """Beträge werden auf Cent gerundet.""" ergebnis = berechne_praemie(5, 3) assert ergebnis.as_tuple().exponent == -2