Add logger/tests/test_core.py
This commit is contained in:
parent
d415d20b5d
commit
d5c6e60057
1 changed files with 75 additions and 0 deletions
75
logger/tests/test_core.py
Normal file
75
logger/tests/test_core.py
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
# Import the module under test from the logger package
|
||||||
|
import src.logger.core as core
|
||||||
|
|
||||||
|
|
||||||
|
def test_logentry_to_dict():
|
||||||
|
ts = time.time()
|
||||||
|
entry = core.LogEntry(
|
||||||
|
timestamp=ts,
|
||||||
|
led_id="LED_A1",
|
||||||
|
lumens=123.4,
|
||||||
|
peak_wavelength=540.2,
|
||||||
|
latitude=48.8566,
|
||||||
|
longitude=2.3522,
|
||||||
|
)
|
||||||
|
data = entry.to_dict()
|
||||||
|
|
||||||
|
assert isinstance(data, dict)
|
||||||
|
assert set(data.keys()) == {
|
||||||
|
"timestamp",
|
||||||
|
"led_id",
|
||||||
|
"lumens",
|
||||||
|
"peak_wavelength",
|
||||||
|
"latitude",
|
||||||
|
"longitude",
|
||||||
|
}
|
||||||
|
assert data["led_id"] == "LED_A1"
|
||||||
|
assert pytest.approx(data["lumens"], 0.01) == 123.4
|
||||||
|
|
||||||
|
|
||||||
|
def test_start_logging_creates_json_file(tmp_path):
|
||||||
|
log_path = tmp_path / "session_log.json"
|
||||||
|
# Monkeypatch output path in the core module if required
|
||||||
|
# but since the API returns a file path, we test the returned path object exists
|
||||||
|
result_path = core.start_logging(interval=0.1, duration=0.3)
|
||||||
|
|
||||||
|
# Ensure a valid path string is returned
|
||||||
|
assert isinstance(result_path, str)
|
||||||
|
|
||||||
|
# Wait briefly to ensure file system flush
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
# The generated log file should exist
|
||||||
|
path_obj = Path(result_path)
|
||||||
|
assert path_obj.exists(), f"Expected log file {path_obj} to exist"
|
||||||
|
|
||||||
|
# JSON should be a list of LogEntries
|
||||||
|
with open(path_obj, "r", encoding="utf-8") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
assert isinstance(data, list)
|
||||||
|
assert len(data) >= 1
|
||||||
|
|
||||||
|
sample = data[0]
|
||||||
|
for key in ["timestamp", "led_id", "lumens", "peak_wavelength", "latitude", "longitude"]:
|
||||||
|
assert key in sample
|
||||||
|
|
||||||
|
|
||||||
|
def test_start_logging_invalid_parameters():
|
||||||
|
# Negative interval should raise an assertion or error
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
core.start_logging(interval=-1, duration=1)
|
||||||
|
|
||||||
|
# Zero duration should still produce a file but likely empty data
|
||||||
|
path = core.start_logging(interval=0.1, duration=0)
|
||||||
|
assert isinstance(path, str)
|
||||||
|
if os.path.exists(path):
|
||||||
|
with open(path, 'r', encoding='utf-8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
assert isinstance(data, list)
|
||||||
Loading…
Reference in a new issue