Add data_logging/tests/test_core.py
This commit is contained in:
parent
4cbf8d72f8
commit
e5b615c77f
1 changed files with 60 additions and 0 deletions
60
data_logging/tests/test_core.py
Normal file
60
data_logging/tests/test_core.py
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
from pathlib import Path
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'src'))
|
||||||
|
|
||||||
|
from data_logging import core
|
||||||
|
|
||||||
|
|
||||||
|
def test_log_data_creates_and_appends_valid_json(tmp_path, monkeypatch):
|
||||||
|
log_file = tmp_path / 'log_data.json'
|
||||||
|
|
||||||
|
# Patch the target output path in the function if it uses fixed path
|
||||||
|
monkeypatch.setattr(core, 'Path', lambda p=None: tmp_path if p is None else Path(p))
|
||||||
|
|
||||||
|
data_points = [
|
||||||
|
{"timestamp": "2024-06-01T12:00:00Z", "temperature": 22.5, "signal_noise_ratio": 35.1},
|
||||||
|
{"timestamp": "2024-06-01T12:05:00Z", "temperature": 22.7, "signal_noise_ratio": 34.8}
|
||||||
|
]
|
||||||
|
|
||||||
|
for dp in data_points:
|
||||||
|
core.log_data(dp['timestamp'], dp['temperature'], dp['signal_noise_ratio'])
|
||||||
|
|
||||||
|
assert log_file.exists(), 'Log file should be created by log_data()'
|
||||||
|
|
||||||
|
with open(log_file, 'r', encoding='utf-8') as f:
|
||||||
|
content = f.read().strip()
|
||||||
|
|
||||||
|
assert content, 'Log file must not be empty.'
|
||||||
|
|
||||||
|
# Interpret as JSON lines
|
||||||
|
lines = content.splitlines()
|
||||||
|
parsed = [json.loads(l) for l in lines]
|
||||||
|
|
||||||
|
assert all(isinstance(p, dict) for p in parsed)
|
||||||
|
|
||||||
|
expected_keys = {'timestamp', 'temperature', 'signal_noise_ratio'}
|
||||||
|
for p in parsed:
|
||||||
|
assert expected_keys.issubset(p.keys())
|
||||||
|
assert isinstance(p['timestamp'], str)
|
||||||
|
assert isinstance(p['temperature'], (float, int))
|
||||||
|
assert isinstance(p['signal_noise_ratio'], (float, int))
|
||||||
|
|
||||||
|
# Check append behavior
|
||||||
|
assert len(parsed) == len(data_points)
|
||||||
|
|
||||||
|
|
||||||
|
def test_log_data_handles_invalid_input(tmp_path):
|
||||||
|
log_file = tmp_path / 'log_data.json'
|
||||||
|
|
||||||
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'src'))
|
||||||
|
|
||||||
|
# Expect that invalid temperature type raises an error
|
||||||
|
with pytest.raises((TypeError, ValueError)):
|
||||||
|
core.log_data('2024-06-01T12:00:00Z', 'invalid', 34.2)
|
||||||
|
|
||||||
|
assert not log_file.exists(), 'Invalid input should not create a file.'
|
||||||
Loading…
Reference in a new issue