feat: Spiel-Bewertungs-Utility mit Tests
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
"""Spiel-Bewertungs-Utility für brettspiel-news.de."""
|
||||||
|
|
||||||
|
MAX_BEWERTUNG = 10
|
||||||
|
MIN_BEWERTUNG = 1
|
||||||
|
|
||||||
|
|
||||||
|
def validate_rating(wert: int) -> bool:
|
||||||
|
"""Validiert eine Spielbewertung.
|
||||||
|
|
||||||
|
Prüft, ob die Bewertung im zulässigen Bereich von 1 bis MAX_BEWERTUNG liegt.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
wert: Die zu prüfende Bewertung als Ganzzahl.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True, wenn die Bewertung gültig ist.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
ValueError: Wenn die Bewertung außerhalb von 1 bis 10 liegt.
|
||||||
|
"""
|
||||||
|
if wert < MIN_BEWERTUNG or wert > MAX_BEWERTUNG:
|
||||||
|
raise ValueError(
|
||||||
|
f"Bewertung {wert} ungültig. Gültiger Bereich: {MIN_BEWERTUNG}–{MAX_BEWERTUNG}"
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def berechne_durchschnitt(bewertungen: list[int]) -> float | None:
|
||||||
|
"""Berechnet den Durchschnitt einer Liste von Bewertungen.
|
||||||
|
|
||||||
|
Validiert jede Bewertung vor der Berechnung. Gibt None zurück,
|
||||||
|
wenn die Liste leer ist.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
bewertungen: Liste von Bewertungen als Ganzzahlen.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Der Durchschnitt als Float, oder None bei leerer Liste.
|
||||||
|
"""
|
||||||
|
if not bewertungen:
|
||||||
|
return None
|
||||||
|
|
||||||
|
for wert in bewertungen:
|
||||||
|
validate_rating(wert)
|
||||||
|
|
||||||
|
return sum(bewertungen) / len(bewertungen)
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
"""Tests für Spiel-Bewertungs-Utility."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from game_rating import berechne_durchschnitt, validate_rating
|
||||||
|
|
||||||
|
|
||||||
|
class TestValidateRating:
|
||||||
|
"""Tests für die validate_rating-Funktion."""
|
||||||
|
|
||||||
|
def test_gueltige_bewertung_eins(self):
|
||||||
|
"""Bewertung 1 ist gültig."""
|
||||||
|
assert validate_rating(1) is True
|
||||||
|
|
||||||
|
def test_gueltige_bewertung_zehn(self):
|
||||||
|
"""Bewertung 10 ist gültig."""
|
||||||
|
assert validate_rating(10) is True
|
||||||
|
|
||||||
|
def test_bewertung_null_wirft_valueerror(self):
|
||||||
|
"""Bewertung 0 wirft ValueError."""
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
validate_rating(0)
|
||||||
|
|
||||||
|
def test_bewertung_elf_wirft_valueerror(self):
|
||||||
|
"""Bewertung 11 wirft ValueError."""
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
validate_rating(11)
|
||||||
|
|
||||||
|
|
||||||
|
class TestBerechneDurchschnitt:
|
||||||
|
"""Tests für die berechne_durchschnitt-Funktion."""
|
||||||
|
|
||||||
|
def test_durchschnitt_bewertungen(self):
|
||||||
|
"""Durchschnitt von [6, 8, 10] ist 8.0."""
|
||||||
|
assert berechne_durchschnitt([6, 8, 10]) == 8.0
|
||||||
|
|
||||||
|
def test_leere_liste_gibt_none(self):
|
||||||
|
"""Leere Liste gibt None zurück."""
|
||||||
|
assert berechne_durchschnitt([]) is None
|
||||||
|
|
||||||
|
def test_ungueltige_bewertung_in_liste_wirft_valueerror(self):
|
||||||
|
"""Ungültige Bewertung in Liste wirft ValueError."""
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
berechne_durchschnitt([5, 0, 10])
|
||||||
Reference in New Issue
Block a user