Files
gw/backend/tests/test_analytics.py
T

77 lines
2.4 KiB
Python
Raw Normal View History

2026-04-18 07:23:55 +12:00
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"])