Add grouped_run_statistics/tests/test_core.py
This commit is contained in:
parent
b367a42989
commit
18fc74a440
1 changed files with 75 additions and 0 deletions
75
grouped_run_statistics/tests/test_core.py
Normal file
75
grouped_run_statistics/tests/test_core.py
Normal 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())
|
||||
Loading…
Reference in a new issue