from datetime import datetime, timedelta, timezone import pytest from app.models.analytics import AnalyticsEvent from tests.conftest import TestSessionLocal @pytest.mark.asyncio async def test_analytics_summary_includes_top_journeys(client, admin_token): now = datetime.now(timezone.utc) async with TestSessionLocal() as session: session.add_all([ AnalyticsEvent( event_type="page_view", page="/", element=None, metadata_={}, session_id="session-1", created_at=now - timedelta(minutes=5), ), AnalyticsEvent( event_type="page_view", page="/pack-walks", element=None, metadata_={}, session_id="session-1", created_at=now - timedelta(minutes=4), ), AnalyticsEvent( event_type="page_view", page="/contact", element=None, metadata_={}, session_id="session-1", created_at=now - timedelta(minutes=3), ), AnalyticsEvent( event_type="page_view", page="/", element=None, metadata_={}, session_id="session-2", created_at=now - timedelta(minutes=2), ), AnalyticsEvent( event_type="page_view", page="/pack-walks", element=None, metadata_={}, session_id="session-2", created_at=now - timedelta(minutes=1), ), AnalyticsEvent( event_type="page_view", page="/pack-walks", element=None, metadata_={}, session_id="session-2", created_at=now, ), ]) await session.commit() response = await client.get( "/api/v1/analytics/summary", headers={"Authorization": f"Bearer {admin_token}"}, ) assert response.status_code == 200, response.text body = response.json() assert "top_journeys" in body assert body["top_journeys"][0] == {"label": "/ -> /pack-walks", "count": 2} assert all(item["label"] != "/pack-walks -> /pack-walks" for item in body["top_journeys"])