from datetime import UTC, datetime from leaderboard_analytics.schemas import QueryFilters from leaderboard_analytics.services import AnalyticsService class FakeRepository: def overview_timeseries(self, filters: QueryFilters) -> list[dict]: return [ {"period": "2026-01-01", "pv": 2, "uv": 1, "session_count": 1, "event_count": 3}, {"period": "2026-01-02", "pv": 1, "uv": 1, "session_count": 1, "event_count": 2}, ] def overview_totals(self, filters: QueryFilters) -> dict: return {"pv": 3, "uv": 1, "sessions": 1, "events": 5} def test_overview_uses_full_range_distinct_totals() -> None: service = AnalyticsService(FakeRepository()) # type: ignore[arg-type] filters = QueryFilters( start_time=datetime(2026, 1, 1, tzinfo=UTC), end_time=datetime(2026, 1, 2, tzinfo=UTC), ) frame, totals = service.get_overview(filters) assert list(frame["period"]) == ["2026-01-01", "2026-01-02"] assert totals == { "pv": 3, "uv": 1, "sessions": 1, "events": 5, "events_per_session": 5.0, "sessions_per_visitor": 1.0, }