diff --git a/policy_evaluation/tests/test_core.py b/policy_evaluation/tests/test_core.py new file mode 100644 index 0000000..76c5741 --- /dev/null +++ b/policy_evaluation/tests/test_core.py @@ -0,0 +1,81 @@ +import pytest +import pandas as pd +import numpy as np +from policy_evaluation import core + +@pytest.fixture +def sample_log_data(): + # Enthält pinned und unpinned-Einträge mit diversen Zeitwerten und Drifts + return [ + { + 't_publish': 1.0, + 't_gate_read': 2.0, + 't_index_visible': 3.0, + 'pinned_flag': True, + 'timeouts': 0, + 'drift_signature': 'normal' + }, + { + 't_publish': 2.0, + 't_gate_read': 3.5, + 't_index_visible': 4.0, + 'pinned_flag': False, + 'timeouts': 1, + 'drift_signature': 'mild_drift' + }, + { + 't_publish': 3.0, + 't_gate_read': 6.0, + 't_index_visible': 7.0, + 'pinned_flag': True, + 'timeouts': 0, + 'drift_signature': 'outlier' + } + ] + + +def test_evaluate_policies_returns_policyresults(sample_log_data): + result = core.evaluate_policies(sample_log_data) + assert isinstance(result, core.PolicyResults) + + +def test_policyresults_fields_are_valid(sample_log_data): + result = core.evaluate_policies(sample_log_data) + data = result.to_json() + required_fields = ['p99_coverage', 'remaining_missing_cases', 'conversion_rates', 'max_wait_time'] + + # Überprüfen, dass alle Felder vorhanden sind und den erwarteten Typen entsprechen + for field in required_fields: + assert field in data, f"{field} fehlt im Resultat" + + assert isinstance(data['p99_coverage'], float) + assert isinstance(data['remaining_missing_cases'], int) + assert isinstance(data['conversion_rates'], float) + assert isinstance(data['max_wait_time'], float) + + +def test_evaluate_policies_values_are_reasonable(sample_log_data): + result = core.evaluate_policies(sample_log_data) + data = result.to_json() + # Da p99 Coverage und Zeit nicht genau definiert, prüfen wir nur Wertebereiche + assert 0.0 <= data['p99_coverage'] <= 1.0 + assert data['remaining_missing_cases'] >= 0 + assert 0.0 <= data['conversion_rates'] <= 1.0 + assert data['max_wait_time'] >= 0.0 + + +def test_evaluate_policies_invalid_input_raises(): + with pytest.raises((TypeError, ValueError)): + core.evaluate_policies(None) + + +def test_evaluate_policies_empty_data(): + result = core.evaluate_policies([]) + # Bei leerem Input sollte gültiges PolicyResults-Objekt erstellt werden + data = result.to_json() + assert isinstance(data, dict) + assert all(k in data for k in ['p99_coverage', 'remaining_missing_cases', 'conversion_rates', 'max_wait_time']) + assert data['p99_coverage'] == 0.0 + assert data['remaining_missing_cases'] == 0 + assert data['conversion_rates'] == 0.0 + assert data['max_wait_time'] == 0.0 \ No newline at end of file