Files
hockey_new/tests/test_build91_runtime_version_pbp_penalty_labels.py

82 lines
2.9 KiB
Python

from pathlib import Path
from hockey_data.service import HockeyDataService
ROOT = Path(__file__).resolve().parents[1]
RUNTIME = (ROOT / "ui_builder/static/runtime.html").read_text(encoding="utf-8")
INDEX = (ROOT / "ui_builder/static/index.html").read_text(encoding="utf-8")
INTEGRATION = (ROOT / "ui_builder/integration.py").read_text(encoding="utf-8")
APP_JS = (ROOT / "ui_builder/static/app.js").read_text(encoding="utf-8")
APP = (ROOT / "app.py").read_text(encoding="utf-8")
def _penalty(side: str, remaining_ms: int = 120000):
return {
"side": side,
"infraction": {"id": "minor"},
"preset": "2m",
"durationMs": 120000,
"remainingMs": remaining_ms,
"finished": False,
}
def _strength(home=0, away=0, language="ru"):
timer_state = {
"penalty_board": {
"penalties": [_penalty("home") for _ in range(home)] + [_penalty("away") for _ in range(away)]
}
}
settings = {
"strength_regulation_skaters": 5,
"strength_regular_overtime_skaters": 3,
"strength_playoff_overtime_skaters": 5,
"strength_min_skaters": 3,
"strength_state_labels": {
"regulation": {
"5x4": {"ru": "Играют в большинстве", "en": "Power play"},
"4x4": {"ru": "4 на 4", "en": "4 on 4"},
"4x3": {"ru": "Большинство 4 на 3", "en": "4 on 3 power play"},
}
},
}
return HockeyDataService._strength_payload(
settings,
stage="regular",
current_period="1",
timer_state=timer_state,
language=language,
)
def test_runtime_badge_is_server_build_version_placeholder():
assert "BUILD __UI_BUILDER_BUILD_VERSION__" in RUNTIME
assert "BUILD __UI_BUILDER_BUILD_VERSION__" in INDEX
assert '.replace("__UI_BUILDER_BUILD_VERSION__", str(build_version or asset_version))' in INTEGRATION
assert "build_version=BUILD_VERSION" in APP
assert 'BUILD_VERSION = "2026.08.20.13"' in APP
def test_play_by_play_defaults_collapsed_until_operator_opens_it():
assert "Object.prototype.hasOwnProperty.call(state.formValues, collapsedKey)" in APP_JS
assert ": true;" in APP_JS
def test_penalized_side_gets_numeric_condition_and_advantage_side_keeps_pp_caption():
payload = _strength(home=1, away=0)
assert payload["home_label"] == "5 на 4"
assert payload["away_label"] == "Играют в большинстве"
def test_equal_coincidental_penalties_expose_numeric_condition_on_both_mapping_sides():
payload = _strength(home=1, away=1)
assert payload["advantage_side"] == ""
assert payload["home_label"] == "4 на 4"
assert payload["away_label"] == "4 на 4"
def test_english_penalty_side_uses_numeric_condition():
payload = _strength(home=1, away=0, language="en")
assert payload["home_label"] == "5 on 4"
assert payload["away_label"] == "Power play"