From 18fc74a440816bf56df022bbba806ead537fd7c5 Mon Sep 17 00:00:00 2001 From: Mika Date: Mon, 2 Feb 2026 17:10:59 +0000 Subject: [PATCH] Add grouped_run_statistics/tests/test_core.py --- grouped_run_statistics/tests/test_core.py | 75 +++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 grouped_run_statistics/tests/test_core.py diff --git a/grouped_run_statistics/tests/test_core.py b/grouped_run_statistics/tests/test_core.py new file mode 100644 index 0000000..2a5c529 --- /dev/null +++ b/grouped_run_statistics/tests/test_core.py @@ -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()) \ No newline at end of file