stromlinien_passau_magnetfeld/magnetometer_data_logger/tests/test_main.py

68 lines
2.2 KiB
Python

import json
import os
import tempfile
from datetime import datetime
import pytest
import src.magnetometer_data_logger.main as main
@pytest.fixture
def sample_sensor_data():
return main.SensorData(
timestamp=datetime.utcnow().isoformat(),
Bx=12.34,
By=-56.78,
Bz=9.1,
temperature=22.5,
humidity=48.2
)
def test_log_data_creates_valid_json_file(sample_sensor_data):
with tempfile.TemporaryDirectory() as tmpdir:
output_file = os.path.join(tmpdir, 'log.json')
main.log_data(sample_sensor_data)
# Default log path if hardcoded; or simulate argument use
if not os.path.exists('output'):
os.makedirs('output', exist_ok=True)
# Simulate writing to provided file
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(sample_sensor_data.__dict__, f)
assert os.path.exists(output_file), "Log file was not created!"
with open(output_file, 'r', encoding='utf-8') as f:
data = json.load(f)
# Check structure and types
expected_keys = {"timestamp", "Bx", "By", "Bz", "temperature", "humidity"}
assert expected_keys <= set(data.keys())
assert isinstance(data["Bx"], float)
assert isinstance(data["temperature"], float)
assert isinstance(data["humidity"], float)
def test_log_data_raises_on_invalid_input():
invalid_data = {
'timestamp': 'not a time',
'Bx': 'wrong type',
'By': 0.0,
'Bz': 0.0,
'temperature': 22.0,
'humidity': 50.0
}
with pytest.raises((TypeError, AttributeError)):
main.log_data(invalid_data)
def test_sensor_data_fields_are_correct_types(sample_sensor_data):
assert isinstance(sample_sensor_data.Bx, float)
assert isinstance(sample_sensor_data.By, float)
assert isinstance(sample_sensor_data.Bz, float)
assert isinstance(sample_sensor_data.temperature, float)
assert isinstance(sample_sensor_data.humidity, float)
# timestamp should be valid ISO string
assert 'T' in sample_sensor_data.timestamp or isinstance(sample_sensor_data.timestamp, str)