Add debug_artifact/tests/test_core.py
This commit is contained in:
parent
1045b453c0
commit
ae6c835b1c
1 changed files with 60 additions and 0 deletions
60
debug_artifact/tests/test_core.py
Normal file
60
debug_artifact/tests/test_core.py
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
import json
|
||||||
|
import pytest
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
# Da der Architekturplan ein Single-Script-Layout vorgibt, importieren wir direkt aus dem Core-Modul.
|
||||||
|
from src.debug_artifact import core
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def sample_raw_events():
|
||||||
|
# Beispielhafte Rohdaten, die realistische Szenarien abbilden.
|
||||||
|
return [
|
||||||
|
{"corr_id": "runA", "mischfenster": 0.45},
|
||||||
|
{"corr_id": "runB", "mischfenster": 0.95},
|
||||||
|
{"corr_id": "runC", "mischfenster": 0.8},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_debug_artifact_basic(sample_raw_events):
|
||||||
|
result = core.create_debug_artifact(sample_raw_events)
|
||||||
|
# Überprüfe Struktur des Rückgabewerts
|
||||||
|
assert isinstance(result, dict), "Ergebnis muss ein Dictionary sein"
|
||||||
|
assert set(result.keys()) == {"worst_mischfenster", "corr_id"}, "Falsche Keys im Ergebnis"
|
||||||
|
# Validierung der Typen
|
||||||
|
assert isinstance(result["worst_mischfenster"], float), "worst_mischfenster muss float sein"
|
||||||
|
assert isinstance(result["corr_id"], str), "corr_id muss str sein"
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_debug_artifact_reproducibility(sample_raw_events):
|
||||||
|
first = core.create_debug_artifact(sample_raw_events)
|
||||||
|
second = core.create_debug_artifact(sample_raw_events)
|
||||||
|
assert first == second, "Ergebnisse müssen bei gleichem Input identisch sein"
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_debug_artifact_edge_cases():
|
||||||
|
# Leere Liste sollte ein definierter Fallback sein
|
||||||
|
result_empty = core.create_debug_artifact([])
|
||||||
|
assert isinstance(result_empty, dict)
|
||||||
|
assert result_empty["worst_mischfenster"] == 0.0
|
||||||
|
assert result_empty["corr_id"] == "none"
|
||||||
|
|
||||||
|
# Ungültige Struktur — Einträge ohne Felder
|
||||||
|
bad_input = [{"no_corr_id": 1}]
|
||||||
|
with pytest.raises((KeyError, AssertionError, ValueError)):
|
||||||
|
_ = core.create_debug_artifact(bad_input)
|
||||||
|
|
||||||
|
|
||||||
|
def test_json_io(tmp_path: Path, sample_raw_events):
|
||||||
|
# Simuliere JSON-Datei-Input und Output
|
||||||
|
input_file = tmp_path / "input.json"
|
||||||
|
output_file = tmp_path / "output.json"
|
||||||
|
input_file.write_text(json.dumps(sample_raw_events))
|
||||||
|
|
||||||
|
loaded = json.loads(input_file.read_text())
|
||||||
|
result = core.create_debug_artifact(loaded)
|
||||||
|
# Ergebnis schreiben und lesen, um Reproduzierbarkeit zu bestätigen
|
||||||
|
output_file.write_text(json.dumps(result))
|
||||||
|
|
||||||
|
reloaded = json.loads(output_file.read_text())
|
||||||
|
assert result == reloaded, "JSON-Schreib-/Lesevorgang muss reproduzierbar sein"
|
||||||
Loading…
Reference in a new issue