Add grouped_run_statistics/tests/test_core.py

This commit is contained in:
Mika 2026-02-02 17:10:59 +00:00
parent b367a42989
commit 18fc74a440

View file

@ -0,0 +1,75 @@
import pytest
from grouped_run_statistics.core import group_runs
@pytest.fixture
def sample_run_data():
# Mix aus pinned/unpinned und allen Statuswerten
return [
{"id": "1", "pinned": True, "status": "PASS"},
{"id": "2", "pinned": False, "status": "PASS"},
{"id": "3", "pinned": True, "status": "WARN"},
{"id": "4", "pinned": False, "status": "FAIL"},
{"id": "5", "pinned": True, "status": "FAIL"},
{"id": "6", "pinned": False, "status": "WARN"},
]
def test_group_runs_nominal(sample_run_data):
stats = group_runs(sample_run_data)
assert isinstance(stats, dict)
expected_keys = {
"pinned_pass", "unpinned_pass", "pinned_warn", "unpinned_warn", "pinned_fail", "unpinned_fail"
}
assert set(stats.keys()) == expected_keys
# Überprüfe Aggregationsergebnisse
assert stats["pinned_pass"] == 1
assert stats["unpinned_pass"] == 1
assert stats["pinned_warn"] == 1
assert stats["unpinned_warn"] == 1
assert stats["pinned_fail"] == 1
assert stats["unpinned_fail"] == 1
def test_group_runs_all_pinned():
data = [
{"id": f"p{i}", "pinned": True, "status": status}
for i, status in enumerate(["PASS", "PASS", "FAIL", "WARN"], start=1)
]
result = group_runs(data)
assert result["pinned_pass"] == 2
assert result["pinned_warn"] == 1
assert result["pinned_fail"] == 1
assert result["unpinned_pass"] == 0
def test_group_runs_all_unpinned():
data = [
{"id": f"u{i}", "pinned": False, "status": status}
for i, status in enumerate(["FAIL", "FAIL", "PASS"], start=1)
]
result = group_runs(data)
assert result["unpinned_pass"] == 1
assert result["unpinned_fail"] == 2
assert result["pinned_pass"] == 0
def test_group_runs_invalid_input_type():
with pytest.raises((TypeError, KeyError, ValueError)):
group_runs("not a list")
with pytest.raises((TypeError, KeyError, ValueError)):
group_runs([{"id": 1, "pinned": "yes", "status": "PASS"}])
def test_group_runs_missing_fields():
incomplete = [{"id": "1", "pinned": True}] # status fehlt
with pytest.raises((KeyError, ValueError)):
group_runs(incomplete)
def test_group_runs_empty_input():
result = group_runs([])
# Alle Werte müssen 0 sein
assert all(v == 0 for v in result.values())