66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
from pathlib import Path
|
||
|
||
from hockey_data.service import HockeyDataService
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
APP_JS = (ROOT / "ui_builder/static/app.js").read_text(encoding="utf-8")
|
||
|
||
|
||
def _penalty(side: str, remaining: int = 90000) -> dict:
|
||
return {
|
||
"side": side,
|
||
"infraction": {"code": "TEST"},
|
||
"preset": "2",
|
||
"durationMs": 120000,
|
||
"remainingMs": remaining,
|
||
"finished": False,
|
||
}
|
||
|
||
|
||
def test_complex_two_vs_one_keeps_real_strength_but_hides_pp_caption_until_one_side_clears():
|
||
settings = {
|
||
"strength_regulation_skaters": 5,
|
||
"strength_min_skaters": 3,
|
||
"strength_state_labels": {"regulation": {"4x3": {"ru": "Играют в большинстве", "en": "Power play"}}},
|
||
}
|
||
value = HockeyDataService._strength_payload(
|
||
settings,
|
||
stage="regular",
|
||
current_period="2",
|
||
timer_state={"penalty_board": {"penalties": [_penalty("home"), _penalty("home"), _penalty("away")] }},
|
||
language="ru",
|
||
)
|
||
assert value["strength_label"] == "3×4"
|
||
assert value["advantage_side"] == "away"
|
||
assert value["home_label"] == ""
|
||
assert value["away_label"] == ""
|
||
|
||
|
||
def test_single_remaining_penalty_outputs_pp_caption_on_opposite_team():
|
||
settings = {
|
||
"strength_regulation_skaters": 5,
|
||
"strength_min_skaters": 3,
|
||
"strength_state_labels": {"regulation": {"5x4": {"ru": "Играют в большинстве", "en": "Power play"}}},
|
||
}
|
||
value = HockeyDataService._strength_payload(
|
||
settings,
|
||
stage="regular",
|
||
current_period="2",
|
||
timer_state={"penalty_board": {"penalties": [_penalty("home")] }},
|
||
language="ru",
|
||
)
|
||
assert value["advantage_side"] == "away"
|
||
assert value["home_label"] == ""
|
||
assert value["away_label"] == "Играют в большинстве"
|
||
|
||
|
||
def test_display_plan_keeps_each_side_while_both_have_penalties_and_clears_when_none():
|
||
start = APP_JS.index("function penaltyDisplayEntriesByTargetSide")
|
||
end = APP_JS.index("function hockeyPenaltySideMappingDetail", start)
|
||
block = APP_JS[start:end]
|
||
assert 'if (home.length && away.length)' in block
|
||
assert 'return { home: take(home), away: take(away), routedToAdvantage: false, advantageSide: "" };' in block
|
||
assert 'return { home: [], away: take(home), routedToAdvantage: true, advantageSide: "away" };' in block
|
||
assert 'return { home: take(away), away: [], routedToAdvantage: true, advantageSide: "home" };' in block
|
||
assert 'return { home: [], away: [], routedToAdvantage: false, advantageSide: "" };' in block
|