mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-18 00:20:13 +01:00
feat: Added Partners, Backgrounds, and related variation selections to commander building.
This commit is contained in:
parent
641b305955
commit
d416c9b238
65 changed files with 11835 additions and 691 deletions
98
code/tests/test_partner_suggestions_telemetry.py
Normal file
98
code/tests/test_partner_suggestions_telemetry.py
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue