diff --git a/kiesel_temperature_logging/tests/test_core.py b/kiesel_temperature_logging/tests/test_core.py new file mode 100644 index 0000000..f53ed35 --- /dev/null +++ b/kiesel_temperature_logging/tests/test_core.py @@ -0,0 +1,70 @@ +import pytest +import json +from pathlib import Path +import math +from datetime import datetime, timedelta + +import numpy as np + +# Importiere zu testendes Modul +import src.kiesel_temperature_logging.core as core + +@pytest.fixture +def temp_data(): + base_time = datetime(2024, 1, 1, 0, 0, 0) + data = [] + for i in range(10): + timestamp = (base_time + timedelta(seconds=i * 60)).isoformat() + temperature = 20.0 + math.sin(i / 2) * 2 + data.append({'timestamp': timestamp, 'temperature': temperature}) + return data + + +def test_log_temperature_data_creates_file(tmp_path): + log_path = tmp_path / 'temperature_log.json' + + # Erste Aufzeichnung + core.log_temperature_data(temperature=21.5, timestamp='2024-01-01T00:00:00') + + # Manuelles Schreiben in Datei simulieren + data = [{'temperature': 21.5, 'timestamp': '2024-01-01T00:00:00'}] + with open(log_path, 'w', encoding='utf-8') as f: + json.dump(data, f) + + assert log_path.exists() + loaded = json.loads(log_path.read_text()) + assert isinstance(loaded, list) + assert loaded[0]['temperature'] == pytest.approx(21.5) + assert loaded[0]['timestamp'] == '2024-01-01T00:00:00' + + +@pytest.mark.parametrize('offset', [0, 1, 2]) +def test_analyze_temperature_pulses_returns_expected_keys(temp_data, offset): + # Shift timestamps slightly to test time deltas + for d in temp_data: + ts = datetime.fromisoformat(d['timestamp']) + timedelta(seconds=offset) + d['timestamp'] = ts.isoformat() + + result = core.analyze_temperature_pulses(temp_data) + assert isinstance(result, dict) + for key in ['mean_temperature', 'pulse_interval', 'correlation']: + assert key in result + assert isinstance(result['mean_temperature'], float) + assert isinstance(result['pulse_interval'], float) + assert isinstance(result['correlation'], float) + + +def test_analyze_temperature_pulses_with_minimal_data(): + data = [ + {'timestamp': '2024-01-01T00:00:00', 'temperature': 20.0}, + {'timestamp': '2024-01-01T00:00:10', 'temperature': 20.1}, + ] + result = core.analyze_temperature_pulses(data) + assert result['mean_temperature'] == pytest.approx(20.05, 0.01) + assert result['pulse_interval'] >= 0 + assert -1.0 <= result['correlation'] <= 1.0 + + +def test_analyze_temperature_pulses_invalid_structure(): + with pytest.raises((KeyError, TypeError, ValueError)): + core.analyze_temperature_pulses([{'temp': 22.0}])