Add artifact.metrics_analysis/tests/test_core.py
This commit is contained in:
parent
8dd26f8a9f
commit
95408f2b33
1 changed files with 58 additions and 0 deletions
58
artifact.metrics_analysis/tests/test_core.py
Normal file
58
artifact.metrics_analysis/tests/test_core.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import pytest
|
||||
from artifact_metrics_analysis import core
|
||||
|
||||
@pytest.fixture
|
||||
def card_data_40():
|
||||
return {
|
||||
'retry_tail_p99': 120.5,
|
||||
'band_width': 45.0
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def card_data_42():
|
||||
return {
|
||||
'retry_tail_p99': 130.2,
|
||||
'band_width': 50.5
|
||||
}
|
||||
|
||||
|
||||
def test_analyze_metrics_basic(card_data_40, card_data_42):
|
||||
result = core.analyze_metrics(card_data_40, card_data_42)
|
||||
assert isinstance(result, core.MetricResults)
|
||||
|
||||
result_dict = result.to_dict()
|
||||
assert pytest.approx(result_dict['retry_tail_p99'], rel=1e-5) == 130.2
|
||||
assert pytest.approx(result_dict['band_width'], rel=1e-5) == 50.5
|
||||
assert pytest.approx(result_dict['delta_band_width'], rel=1e-5) == 5.5
|
||||
|
||||
|
||||
def test_analyze_metrics_delta_negative(card_data_40, card_data_42):
|
||||
data42 = {**card_data_42, 'band_width': 40.0}
|
||||
result = core.analyze_metrics(card_data_40, data42)
|
||||
result_dict = result.to_dict()
|
||||
# delta_band_width = 40.0 - 45.0 = -5.0
|
||||
assert result_dict['delta_band_width'] == pytest.approx(-5.0)
|
||||
|
||||
|
||||
def test_metricresults_to_dict_structure():
|
||||
m = core.MetricResults(100.0, 40.0, -2.0)
|
||||
d = m.to_dict()
|
||||
assert set(d.keys()) == {'retry_tail_p99', 'band_width', 'delta_band_width'}
|
||||
assert d['retry_tail_p99'] == 100.0
|
||||
assert d['band_width'] == 40.0
|
||||
assert d['delta_band_width'] == -2.0
|
||||
|
||||
|
||||
def test_invalid_input_handling():
|
||||
# Missing keys should raise KeyError or ValueError
|
||||
bad_40 = {'retry_tail_p99': 50.0}
|
||||
bad_42 = {'band_width': 10.0}
|
||||
with pytest.raises((KeyError, ValueError, TypeError)):
|
||||
core.analyze_metrics(bad_40, bad_42)
|
||||
|
||||
|
||||
def test_type_integrity(card_data_40, card_data_42):
|
||||
result = core.analyze_metrics(card_data_40, card_data_42)
|
||||
d = result.to_dict()
|
||||
assert all(isinstance(v, (float, int)) for v in d.values())
|
||||
Loading…
Reference in a new issue