Add kiesel_temperature_logging/tests/test_core.py

This commit is contained in:
Mika 2026-06-21 02:07:24 +00:00
parent a5abca36ac
commit 8a44fe4700

View file

@ -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}])