mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-16 15:40:12 +01:00
98 lines
No EOL
3.7 KiB
Python
98 lines
No EOL
3.7 KiB
Python
import json
|
|
import logging
|
|
from typing import Any, Dict
|
|
|
|
import pytest
|
|
from starlette.requests import Request
|
|
|
|
from code.web.services.telemetry import (
|
|
log_partner_suggestion_selected,
|
|
log_partner_suggestions_generated,
|
|
)
|
|
|
|
|
|
async def _receive() -> Dict[str, Any]:
|
|
return {"type": "http.request", "body": b"", "more_body": False}
|
|
|
|
|
|
def _make_request(path: str, method: str = "GET", query_string: str = "") -> Request:
|
|
scope = {
|
|
"type": "http",
|
|
"method": method,
|
|
"scheme": "http",
|
|
"path": path,
|
|
"raw_path": path.encode("utf-8"),
|
|
"query_string": query_string.encode("utf-8"),
|
|
"headers": [],
|
|
"client": ("203.0.113.5", 52345),
|
|
"server": ("testserver", 80),
|
|
}
|
|
request = Request(scope, receive=_receive)
|
|
request.state.request_id = "req-123"
|
|
return request
|
|
|
|
|
|
def test_log_partner_suggestions_generated_emits_payload(caplog: pytest.LogCaptureFixture) -> None:
|
|
request = _make_request("/api/partner/suggestions", query_string="commander=Akiri&mode=partner")
|
|
metadata = {"dataset_version": "2025-10-05", "record_count": 42}
|
|
|
|
with caplog.at_level(logging.INFO, logger="web.partner_suggestions"):
|
|
log_partner_suggestions_generated(
|
|
request,
|
|
commander_display="Akiri, Fearless Voyager",
|
|
commander_canonical="akiri, fearless voyager",
|
|
include_modes=["partner"],
|
|
available_modes=["partner"],
|
|
total=3,
|
|
mode_counts={"partner": 3},
|
|
visible_count=2,
|
|
hidden_count=1,
|
|
limit_per_mode=5,
|
|
visible_limit=3,
|
|
include_hidden=False,
|
|
refresh_requested=False,
|
|
dataset_metadata=metadata,
|
|
)
|
|
|
|
matching = [record for record in caplog.records if record.name == "web.partner_suggestions"]
|
|
assert matching, "Expected partner suggestions telemetry log"
|
|
payload = json.loads(matching[-1].message)
|
|
assert payload["event"] == "partner_suggestions.generated"
|
|
assert payload["commander"]["display"] == "Akiri, Fearless Voyager"
|
|
assert payload["filters"]["include_modes"] == ["partner"]
|
|
assert payload["result"]["mode_counts"]["partner"] == 3
|
|
assert payload["result"]["visible_count"] == 2
|
|
assert payload["result"]["metadata"]["dataset_version"] == "2025-10-05"
|
|
assert payload["query"]["mode"] == "partner"
|
|
|
|
|
|
def test_log_partner_suggestion_selected_emits_payload(caplog: pytest.LogCaptureFixture) -> None:
|
|
request = _make_request("/build/partner/preview", method="POST")
|
|
|
|
with caplog.at_level(logging.INFO, logger="web.partner_suggestions"):
|
|
log_partner_suggestion_selected(
|
|
request,
|
|
commander="Rograkh, Son of Rohgahh",
|
|
scope="partner",
|
|
partner_enabled=True,
|
|
auto_opt_out=False,
|
|
auto_assigned=False,
|
|
selection_source="suggestion",
|
|
secondary_candidate="Silas Renn, Seeker Adept",
|
|
background_candidate=None,
|
|
resolved_secondary="Silas Renn, Seeker Adept",
|
|
resolved_background=None,
|
|
partner_mode="partner",
|
|
has_preview=True,
|
|
warnings=["Color identity expanded"],
|
|
error=None,
|
|
)
|
|
|
|
matching = [record for record in caplog.records if record.name == "web.partner_suggestions"]
|
|
assert matching, "Expected partner suggestion selection telemetry log"
|
|
payload = json.loads(matching[-1].message)
|
|
assert payload["event"] == "partner_suggestions.selected"
|
|
assert payload["selection_source"] == "suggestion"
|
|
assert payload["resolved"]["partner_mode"] == "partner"
|
|
assert payload["warnings_count"] == 1
|
|
assert payload["has_error"] is False |