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