From 9246676a9576634b4880c3ed8859e7ab5c65ccc5 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 18 Jan 2026 16:37:02 +0000 Subject: [PATCH] Add measurement_logging/tests/test_core.py --- measurement_logging/tests/test_core.py | 110 +++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 measurement_logging/tests/test_core.py diff --git a/measurement_logging/tests/test_core.py b/measurement_logging/tests/test_core.py new file mode 100644 index 0000000..d7d9970 --- /dev/null +++ b/measurement_logging/tests/test_core.py @@ -0,0 +1,110 @@ +import csv +import tempfile +from pathlib import Path +import pytest + +# Da tested_module null ist, importiere direkt aus dem Paketnamen +from measurement_logging import core + + +def test_log_measurement_creates_csv_with_correct_columns(): + headers = ["time", "temperature", "humidity", "iso", "exposure", "rms_noise"] + with tempfile.TemporaryDirectory() as tmpdir: + csv_path = Path(tmpdir) / "measurements.csv" + + # Aufruf der Funktion mit Dummy-Werten + core.log_measurement( + time="22:30:00", + temperature=12.5, + humidity=80.2, + iso=1600, + exposure=1.25, + rms_noise=0.003 + ) + + # Im vorgesehenen Pfad überprüft die Funktion, ob Datei existiert + # Test simuliert durch Schreiben in tmpdir + core.log_measurement( + time="22:30:00", + temperature=12.5, + humidity=80.2, + iso=1600, + exposure=1.25, + rms_noise=0.003 + ) + + # Nun manuelles Schreiben in csv_path, da Datei intern fest definiert sein könnte + # Wir prüfen Struktur und Inhalt + core.log_measurement( + time="22:31:00", + temperature=13.2, + humidity=79.5, + iso=1600, + exposure=1.0, + rms_noise=0.004 + ) + + # Statt reale Datei, testen wir die Funktion separat mit lokaler CSV + with tempfile.NamedTemporaryFile(mode='w+', newline='', suffix='.csv') as tmp: + tmp_path = Path(tmp.name) + # Erstelle CSV über interne Funktion + core.csv_output_path = tmp_path # Falls Funktion dynamisch Pfad nutzt + core.log_measurement( + time="23:00:00", + temperature=10.0, + humidity=75.0, + iso=800, + exposure=2.0, + rms_noise=0.001 + ) + tmp.seek(0) + reader = csv.reader(tmp) + rows = list(reader) + + assert rows[0] == headers, "CSV sollte Header mit korrekten Spaltennamen enthalten." + assert len(rows) == 2, "CSV sollte eine Kopfzeile und eine Datenzeile enthalten." + + +def test_log_measurement_appends_rows(): + with tempfile.NamedTemporaryFile(mode='w+', newline='', suffix='.csv', delete=False) as tmp: + tmp_path = Path(tmp.name) + try: + # Erste Messung schreiben + core.log_measurement( + time="00:00:00", + temperature=5.0, + humidity=60.0, + iso=400, + exposure=1.2, + rms_noise=0.002 + ) + + # Zweite Messung schreiben + core.log_measurement( + time="00:10:00", + temperature=6.0, + humidity=61.0, + iso=400, + exposure=1.1, + rms_noise=0.0018 + ) + + # Lesen und prüfen + with open(tmp_path, newline='') as f: + reader = list(csv.reader(f)) + # Header und zwei Datenzeilen erwartet + assert len(reader) >= 3, "Es sollten mindestens 2 Messzeilen plus Header geschrieben werden." + finally: + tmp_path.unlink(missing_ok=True) + + +def test_log_measurement_rejects_invalid_types(): + with pytest.raises((TypeError, ValueError)): + core.log_measurement( + time=12345, # Sollte str sein + temperature="warm", # Sollte float sein + humidity=50.0, + iso=800, + exposure=1.0, + rms_noise=0.001 + )