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