| 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()) |
| 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, |
| } |
|
|