85 lines
3.7 KiB
Python
85 lines
3.7 KiB
Python
from pathlib import Path
|
|
|
|
from hockey_data.auth_bridge import HockeyUser
|
|
from hockey_data.mapping_context import MappingDataService
|
|
from tests.support import LocalTestDatabase
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
APP = (ROOT / "ui_builder/static/app.js").read_text(encoding="utf-8")
|
|
|
|
|
|
def test_prepared_titles_is_forced_to_last_runtime_tab_and_uses_hockey_api_directly():
|
|
assert 'state.config.tabs = state.config.tabs.filter((tab) => tab?.id !== "prepared_titles")' in APP
|
|
assert 'state.config.tabs.push({ id: "prepared_titles", label: "Заготовки" });' in APP
|
|
# BUILD84 accidentally routed these through boot.api (/api/ui-builder/runtime), producing 404 Not Found.
|
|
prepared_slice = APP[APP.index("async function hockeyLoadPreparedMappingSources"):APP.index("function renderHockeyPreparedTitlesWorkspace")]
|
|
assert 'api(`/api/hockey/prepared-titles' not in prepared_slice
|
|
assert 'api("/api/hockey/prepared-titles' not in prepared_slice
|
|
assert 'hockeyGameControlRequest(`/prepared-titles' in prepared_slice
|
|
assert 'hockeyGameControlRequest(`/agents/vmix-inventory' in prepared_slice
|
|
|
|
|
|
def test_prepared_title_browser_keeps_title_inputs_visible_even_without_field_inventory():
|
|
start = APP.index("function hockeyPreparedInventoryInputs")
|
|
end = APP.index("function hockeyPreparedSourceIdentity", start)
|
|
block = APP[start:end]
|
|
assert 'fields.length > 0' in block
|
|
assert '(GT|XAML|TITLE)' in block
|
|
|
|
|
|
def test_penalty_side_context_is_match_shared_between_operator_and_admin(tmp_path):
|
|
db = LocalTestDatabase(tmp_path / "ctx.sqlite3")
|
|
db.create_all()
|
|
service = MappingDataService(db)
|
|
operator = HockeyUser(id="op", login="operator", display_name="Operator")
|
|
admin = HockeyUser(id="admin", login="admin", display_name="Admin")
|
|
|
|
service.set_context_value("selected_home_penalty_id", "pen-home-17", operator, {"game_id": "game-1"})
|
|
service.set_context_value("selected_away_penalty_id", "pen-away-9", operator, {"game_id": "game-1"})
|
|
context, variables = service.resolve_context(admin, {"game_id": "game-1"})
|
|
values = {item["key"]: item.get("value", "") for item in variables}
|
|
|
|
assert context["selected_home_penalty_id"] == "pen-home-17"
|
|
assert context["selected_away_penalty_id"] == "pen-away-9"
|
|
assert values["selected_home_penalty_id"] == "pen-home-17"
|
|
assert values["selected_away_penalty_id"] == "pen-away-9"
|
|
|
|
|
|
def test_context_batch_route_precedes_dynamic_context_key_route(tmp_path):
|
|
from fastapi import FastAPI
|
|
from fastapi.testclient import TestClient
|
|
from hockey_data.agent_bridge import VmixAgentHub, create_hockey_agent_router
|
|
|
|
db = LocalTestDatabase(tmp_path / "batch.sqlite3")
|
|
db.create_all()
|
|
hub = VmixAgentHub(db) # type: ignore[arg-type]
|
|
user = HockeyUser(id="op", login="operator", display_name="Operator")
|
|
|
|
async def auth():
|
|
return user
|
|
|
|
app = FastAPI()
|
|
app.include_router(create_hockey_agent_router(hub, auth_dependency=auth))
|
|
client = TestClient(app)
|
|
response = client.post(
|
|
"/api/hockey/context/batch",
|
|
json={
|
|
"values": {
|
|
"selected_home_penalty_id": "pen-home-17",
|
|
"selected_home_penalty_player_id": "777",
|
|
"selected_home_penalty_player_db_id": "42",
|
|
"selected_home_penalty_team_penalty": "0",
|
|
},
|
|
"context": {"game_id": "game-1"},
|
|
},
|
|
)
|
|
assert response.status_code == 200, response.text
|
|
payload = response.json()
|
|
assert payload["ok"] is True
|
|
assert {item["key"] for item in payload["items"]} == {
|
|
"selected_home_penalty_id",
|
|
"selected_home_penalty_player_id",
|
|
"selected_home_penalty_player_db_id",
|
|
"selected_home_penalty_team_penalty",
|
|
}
|