Add gate_decision/tests/test_core.py

This commit is contained in:
Mika 2026-01-25 17:42:37 +00:00
parent e2c53be770
commit 37562d68fd

View file

@ -0,0 +1,58 @@
import pytest
import json
from gate_decision import core
@pytest.fixture
def valid_summary_pass():
return {
"mischfenster_p95": 0.8,
"retry_free_in_window_rate": 0.99,
"max_value": 1.2
}
@pytest.fixture
def valid_summary_fail():
return {
"mischfenster_p95": 5.0,
"retry_free_in_window_rate": 0.5,
"max_value": 10.0
}
@pytest.fixture
def invalid_summary():
return {
"mischfenster_p95": "invalid",
"retry_free_in_window_rate": 0.9
}
def test_make_decision_pass(valid_summary_pass):
result = core.make_decision(valid_summary_pass)
assert isinstance(result, dict)
assert result.get("decision") == "pass"
assert "explanation" in result
def test_make_decision_fail(valid_summary_fail):
result = core.make_decision(valid_summary_fail)
assert isinstance(result, dict)
assert result.get("decision") == "fail"
assert "explanation" in result
def test_make_decision_invalid_type(invalid_summary):
with pytest.raises((AssertionError, ValueError, TypeError)):
_ = core.make_decision(invalid_summary)
def test_deterministic_behavior(valid_summary_pass):
result1 = core.make_decision(valid_summary_pass)
result2 = core.make_decision(valid_summary_pass)
assert result1 == result2
def test_output_is_json_serializable(valid_summary_pass):
result = core.make_decision(valid_summary_pass)
json_str = json.dumps(result)
assert isinstance(json_str, str)
decoded = json.loads(json_str)
assert decoded == result