77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
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"])
|