From 2d4ccdc971535b6412ab3cbae6b6602aebe75c91 Mon Sep 17 00:00:00 2001 From: "Alicia (BSN)" Date: Sun, 21 Jun 2026 21:50:38 +0000 Subject: [PATCH] feat: Spiel-Bewertungs-Utility mit Tests --- game_rating.py | 46 +++++++++++++++++++++++++++++++++++++++++++++ test_game_rating.py | 44 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 game_rating.py create mode 100644 test_game_rating.py diff --git a/game_rating.py b/game_rating.py new file mode 100644 index 0000000..7f9e53c --- /dev/null +++ b/game_rating.py @@ -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) diff --git a/test_game_rating.py b/test_game_rating.py new file mode 100644 index 0000000..4cad65b --- /dev/null +++ b/test_game_rating.py @@ -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])