import datetime import freezegun import pytest from tadas.platform import metrics as metrics_utils class TestMetrics: @pytest.fixture(autouse=True) def setup(self): self.metrics = metrics_utils.Metrics(category='sample_category', context={'c': 'v1', 'a': 'v2'}) @pytest.mark.parametrize( 'metrics, context, expected', [ pytest.param( { 'n1': 'v1', 'n2': 'v2', }, { 'report_date': '2025-05-28', 'version': '123', }, '{"metrics_category": "sample_category", ' '"n1": "v1", "n2": "v2", ' '"c": "v1", "a": "v2"}' ) ] ) def test_send_metrics(self, metrics, context, expected): for name, value in metrics.items(): self.metrics.add_metric(name, value) result = self.metrics.serialize_json() assert result == expected class TestDurationMetrics: @pytest.fixture(autouse=True) def setup(self): self.metrics = metrics_utils.DurationMetrics(category='sample_category', context={'c': 'v1', 'a': 'v2'}) def test_duration_metric(self): context = {'report_date': '2025-05-28', 'version': '123'} metrics = metrics_utils.DurationMetrics( category='sample_category', context=context ) with freezegun.freeze_time('2025-05-28 12:23:10.088'): metrics.start() with freezegun.freeze_time('2025-05-28 12:28:05.123'): metrics.finish() assert metrics.metrics == { 'completed': '2025-05-28T12:28:05', 'duration_sec': 295, 'started': '2025-05-28T12:23:10'} assert metrics.context == context