Add sensor_logging/tests/test_core.py
This commit is contained in:
parent
b8b14097eb
commit
d053faef61
1 changed files with 62 additions and 0 deletions
62
sensor_logging/tests/test_core.py
Normal file
62
sensor_logging/tests/test_core.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
import json
|
||||
import re
|
||||
from datetime import datetime
|
||||
import pytest
|
||||
|
||||
import src.sensor_logging.core as core
|
||||
|
||||
|
||||
def test_sensor_data_to_json_contains_required_fields():
|
||||
sensor = core.SensorData(sensor_id='SensorA', temperature=22.5, humidity=55.3, timestamp=datetime(2024, 6, 12, 8, 30, 45))
|
||||
data_json = sensor.to_json()
|
||||
|
||||
parsed = json.loads(data_json)
|
||||
assert set(parsed.keys()) == {'sensor_id', 'temperature', 'humidity', 'timestamp'}
|
||||
assert parsed['sensor_id'] == 'SensorA'
|
||||
assert pytest.approx(parsed['temperature'], 0.001) == 22.5
|
||||
assert pytest.approx(parsed['humidity'], 0.001) == 55.3
|
||||
|
||||
|
||||
def test_sensor_data_timestamp_is_iso_format():
|
||||
sensor = core.SensorData(sensor_id='S123', temperature=10.0, humidity=50.0, timestamp=datetime.now())
|
||||
data_json = sensor.to_json()
|
||||
parsed = json.loads(data_json)
|
||||
timestamp = parsed['timestamp']
|
||||
|
||||
assert isinstance(timestamp, str)
|
||||
# check ISO 8601-like pattern
|
||||
iso_pattern = r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
|
||||
assert re.match(iso_pattern, timestamp)
|
||||
|
||||
|
||||
def test_log_sensor_data_writes_to_file(tmp_path):
|
||||
log_file = tmp_path / 'sensor_log.json'
|
||||
|
||||
# patch output path temporarily
|
||||
original_output = core.os.path.join
|
||||
def mocked_join(a, b):
|
||||
if b == 'output/sensor_log.json':
|
||||
return str(log_file)
|
||||
return original_output(a, b)
|
||||
|
||||
core.os.path.join = mocked_join
|
||||
|
||||
try:
|
||||
core.log_sensor_data('SensorB', 18.2, 42.1)
|
||||
assert log_file.exists()
|
||||
content = log_file.read_text().strip()
|
||||
assert content # not empty
|
||||
parsed = json.loads(content.splitlines()[-1])
|
||||
assert parsed['sensor_id'] == 'SensorB'
|
||||
assert pytest.approx(parsed['temperature'], 0.001) == 18.2
|
||||
assert pytest.approx(parsed['humidity'], 0.001) == 42.1
|
||||
finally:
|
||||
core.os.path.join = original_output
|
||||
|
||||
|
||||
def test_invalid_temperature_type_raises():
|
||||
with pytest.raises((TypeError, ValueError)):
|
||||
core.log_sensor_data('SensorC', 'not_a_float', 45.1)
|
||||
|
||||
with pytest.raises((TypeError, ValueError)):
|
||||
core.log_sensor_data('SensorC', 23.3, 'bad_humidity')
|
||||
Loading…
Reference in a new issue