From f3e580200e4ec64e561baa483aaeb21f9232dfd9 Mon Sep 17 00:00:00 2001 From: Mika Date: Sat, 17 Jan 2026 17:01:58 +0000 Subject: [PATCH] Add trace_agg/tests/test_core.py --- trace_agg/tests/test_core.py | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 trace_agg/tests/test_core.py diff --git a/trace_agg/tests/test_core.py b/trace_agg/tests/test_core.py new file mode 100644 index 0000000..e536584 --- /dev/null +++ b/trace_agg/tests/test_core.py @@ -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)