Add sensor_logging/tests/test_main.py

This commit is contained in:
Mika 2026-02-15 03:06:25 +00:00
parent d2268f659c
commit 1affdf1ac8

View file

@ -0,0 +1,59 @@
import json
import tempfile
import os
import pytest
from pathlib import Path
import src.sensor_logging.main as main
def test_sensor_data_to_json_structure():
s = main.SensorData(voltage=123.4, temperature=22.1, humidity=55.2)
data = s.to_json()
assert isinstance(data, dict)
assert set(data.keys()) == {"timestamp", "voltage", "temperature", "humidity"}
assert isinstance(data["timestamp"], str)
assert data["voltage"] == pytest.approx(123.4)
assert data["temperature"] == pytest.approx(22.1)
assert data["humidity"] == pytest.approx(55.2)
def test_log_sensor_data_creates_file_and_appends():
with tempfile.TemporaryDirectory() as tmpdir:
logfile = Path(tmpdir) / "sensor_log.json"
# First log entry
main.log_sensor_data(1.0, 2.0, 3.0)
# Override output path temporarily
orig_path = getattr(main, "DEFAULT_OUTPUT_PATH", None)
try:
main.DEFAULT_OUTPUT_PATH = logfile
main.log_sensor_data(4.5, 6.7, 8.9)
finally:
if orig_path is not None:
main.DEFAULT_OUTPUT_PATH = orig_path
assert logfile.exists()
content = logfile.read_text().strip().splitlines()
# Assuming each line is separate JSON object
parsed = [json.loads(line) for line in content]
assert len(parsed) >= 1
for p in parsed:
assert set(p.keys()) == {"timestamp", "voltage", "temperature", "humidity"}
assert isinstance(p["voltage"], (int, float))
def test_log_sensor_data_invalid_inputs_raises(tmp_path):
# Invalid voltage type
with pytest.raises((TypeError, ValueError)):
main.log_sensor_data("bad", 25.0, 40.0)
with pytest.raises((TypeError, ValueError)):
main.log_sensor_data(2.0, None, 50.0)
def test_sensor_data_timestamp_format():
s = main.SensorData(voltage=2.2, temperature=3.3, humidity=4.4)
t = s.to_json()["timestamp"]
# Basic ISO8601 pattern validation
assert "T" in t and t.endswith("Z")