import pytest

from pypos.modules.dashboard.services.export_runtime_metrics_service import ExportRuntimeMetricsService

# edited by glg
pytestmark = [pytest.mark.unit]


def test_snapshot_hitung_error_rate_dan_p95():
    service = ExportRuntimeMetricsService(max_samples=10)
    service.observe_cycle({"ran": True, "uploaded": 90, "failed": 10}, 500.0)
    service.observe_cycle({"ran": True, "uploaded": 50, "failed": 0}, 1000.0)
    service.observe_cycle({"ran": False, "uploaded": 999, "failed": 999}, 2000.0)

    snap = service.snapshot()
    assert round(float(snap.get("error_rate_pct") or 0.0), 3) == round((10 * 100.0) / 150.0, 3)
    assert float(snap.get("p95_latency_ms") or 0.0) == 1000.0
    assert int(snap.get("latency_sample_count") or 0) == 2
    assert int(snap.get("attempt_sample_count") or 0) == 2


def test_snapshot_batasi_jumlah_sample():
    service = ExportRuntimeMetricsService(max_samples=3)
    service.observe_cycle({"ran": True, "uploaded": 10, "failed": 0}, 100.0)
    service.observe_cycle({"ran": True, "uploaded": 10, "failed": 0}, 200.0)
    service.observe_cycle({"ran": True, "uploaded": 10, "failed": 0}, 300.0)
    service.observe_cycle({"ran": True, "uploaded": 10, "failed": 0}, 400.0)

    snap = service.snapshot()
    assert int(snap.get("latency_sample_count") or 0) == 3
    assert float(snap.get("p95_latency_ms") or 0.0) == 400.0

