Add trace_agg/tests/test_core.py

This commit is contained in:
Mika 2026-01-17 17:01:58 +00:00
parent ea798c54e2
commit f3e580200e

View 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)