Add trace_agg/tests/test_core.py
This commit is contained in:
parent
ea798c54e2
commit
f3e580200e
1 changed files with 62 additions and 0 deletions
62
trace_agg/tests/test_core.py
Normal file
62
trace_agg/tests/test_core.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
import json
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
|
||||
from src.trace_agg import core
|
||||
|
||||
# Testdaten-Struktur entsprechend dem Data Model TraceDataRecord
|
||||
def _valid_trace_data():
|
||||
return [
|
||||
{
|
||||
"run_id": "run_01",
|
||||
"mischfenster_p50": 10.0,
|
||||
"mischfenster_p95": 20.0,
|
||||
"mischfenster_max": 25.0,
|
||||
"step_order_stability": 0.9,
|
||||
"read_between_steps": 5,
|
||||
},
|
||||
{
|
||||
"run_id": "run_02",
|
||||
"mischfenster_p50": 15.0,
|
||||
"mischfenster_p95": 25.0,
|
||||
"mischfenster_max": 30.0,
|
||||
"step_order_stability": 0.8,
|
||||
"read_between_steps": 7,
|
||||
},
|
||||
]
|
||||
|
||||
@pytest.fixture
|
||||
def trace_data():
|
||||
return _valid_trace_data()
|
||||
|
||||
def test_generate_summary_returns_dict(trace_data):
|
||||
result = core.generate_summary(trace_data)
|
||||
assert isinstance(result, dict), "Result muss ein dict sein"
|
||||
assert "aggregated" in result, "Summary soll 'aggregated'-Schlüssel enthalten"
|
||||
|
||||
|
||||
def test_generate_summary_contains_expected_keys(trace_data):
|
||||
summary = core.generate_summary(trace_data)
|
||||
aggregated = summary.get("aggregated", {})
|
||||
expected_keys = {"mischfenster_p50", "mischfenster_p95", "mischfenster_max", "step_order_stability", "read_between_steps"}
|
||||
assert expected_keys.issubset(aggregated.keys()), "Alle erwarteten Kennzahlen müssen vorhanden sein"
|
||||
|
||||
|
||||
def test_generate_summary_value_ranges(trace_data):
|
||||
summary = core.generate_summary(trace_data)
|
||||
agg = summary["aggregated"]
|
||||
assert agg["mischfenster_max"] >= agg["mischfenster_p95"] >= agg["mischfenster_p50"], "Statistische Reihenfolge soll stimmen"
|
||||
assert 0 <= agg["step_order_stability"] <= 1, "Stabilitätswert soll zwischen 0 und 1 liegen"
|
||||
assert agg["read_between_steps"] >= 0, "read_between_steps sollte nicht negativ sein"
|
||||
|
||||
|
||||
def test_generate_summary_with_empty_input():
|
||||
result = core.generate_summary([])
|
||||
# Erwartet: leeres oder Default-Summary
|
||||
assert isinstance(result, dict)
|
||||
assert result.get("aggregated"), "Es sollte auch bei leerer Eingabe eine Struktur zurückgegeben werden"
|
||||
|
||||
|
||||
def test_generate_summary_invalid_input_type():
|
||||
with pytest.raises((TypeError, ValueError)):
|
||||
core.generate_summary(None)
|
||||
Loading…
Reference in a new issue