идентификаторы удалений, заготовки

This commit is contained in:
2026-08-20 13:51:51 +03:00
parent 9422719ea6
commit d90c4500ad
4 changed files with 166 additions and 25 deletions

View File

@@ -0,0 +1,84 @@
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",
}