feat: Spiel-Bewertungs-Utility mit Tests

This commit is contained in:
Alicia (BSN)
2026-06-21 21:50:38 +00:00
parent eebf21a8fc
commit 2d4ccdc971
2 changed files with 90 additions and 0 deletions
+46
View File
@@ -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)
+44
View File
@@ -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])