"""Продуктовый счётчик экспорта отчётов (#3471): выгрузок §22-форсайта / ТЗ. Мера кардинальности та же, что в `test_metrics.py`: единственный лейбл — `format`, фиксированный литерал из `Literal[...]` сигнатуры эндпоинта (`export_parcel_forecast`) плюс одно статичное значение `best_layouts_pdf` (ТЗ на проектирование) — не кадастровый номер и не идентификатор пользователя. """ from __future__ import annotations from prometheus_client import REGISTRY, generate_latest from app.observability import metrics as m def test_reports_exported_counter_has_bounded_format_label() -> None: assert tuple(m.REPORTS_EXPORTED._labelnames) == ("format",) # type: ignore[attr-defined] def test_reports_exported_counter_increments_per_format() -> None: def _value(fmt: str) -> float: return ( REGISTRY.get_sample_value("sitefinder_reports_exported_total", {"format": fmt}) or 0.0 ) before_pdf = _value("pdf") before_layouts = _value("best_layouts_pdf") m.REPORTS_EXPORTED.labels(format="pdf").inc() m.REPORTS_EXPORTED.labels(format="best_layouts_pdf").inc() assert _value("pdf") - before_pdf == 1.0 assert _value("best_layouts_pdf") - before_layouts == 1.0 body = generate_latest(REGISTRY).decode() assert "sitefinder_reports_exported_total" in body