поправлены сложные удаления
This commit is contained in:
@@ -12,8 +12,8 @@ def test_penalty_display_routes_single_side_to_opposite_advantage_target():
|
||||
end = APP_JS.index("function hockeyPenaltySideMappingDetail", start)
|
||||
block = APP_JS[start:end]
|
||||
assert 'if (home.length && away.length)' in block
|
||||
assert 'return { home: [], away: home.slice(0, 1), routedToAdvantage: true };' in block
|
||||
assert 'return { home: away.slice(0, 1), away: [], routedToAdvantage: true };' 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
|
||||
|
||||
|
||||
def test_penalty_rebalance_and_initial_timer_use_same_display_plan():
|
||||
|
||||
@@ -44,15 +44,14 @@ def test_strength_engine_reports_advantage_for_4x3_and_3x4():
|
||||
assert away_advantage["advantage_side"] == "away"
|
||||
|
||||
|
||||
def test_penalty_plate_routing_uses_strength_advantage_side():
|
||||
def test_penalty_plate_routing_defers_powerplay_while_both_sides_have_penalties():
|
||||
start = APP_JS.index("function penaltyDisplayEntriesByTargetSide")
|
||||
end = APP_JS.index("function hockeyPenaltySideMappingDetail", start)
|
||||
block = APP_JS[start:end]
|
||||
assert 'getByPath(state.data, "hockey.game_control.strength")' in block
|
||||
assert 'if (advantageSide === "home")' in block
|
||||
assert 'return { home: take(away), away: [], routedToAdvantage: true, advantageSide: "home" };' in block
|
||||
assert 'if (advantageSide === "away")' in block
|
||||
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
|
||||
|
||||
|
||||
def test_database_schema_reference_lists_real_hockey_tables(tmp_path: Path):
|
||||
|
||||
@@ -14,11 +14,11 @@ def test_authoritative_strength_change_rebalances_penalty_targets():
|
||||
assert "Penalty strength rebalance error" in block
|
||||
|
||||
|
||||
def test_penalty_plan_still_routes_two_vs_one_to_advantage_side():
|
||||
def test_penalty_plan_rebalances_after_strength_refresh_without_forcing_complex_powerplay():
|
||||
start = APP_JS.index("function penaltyDisplayEntriesByTargetSide")
|
||||
end = APP_JS.index("function hockeyPenaltySideMappingDetail", start)
|
||||
block = APP_JS[start:end]
|
||||
assert 'if (advantageSide === "home")' in block
|
||||
assert 'return { home: take(away), away: [], routedToAdvantage: true, advantageSide: "home" };' in block
|
||||
assert 'if (advantageSide === "away")' in block
|
||||
assert 'return { home: [], away: take(home), routedToAdvantage: true, advantageSide: "away" };' in block
|
||||
assert 'if (home.length && away.length)' in block
|
||||
assert 'routedToAdvantage: false' in block
|
||||
assert 'if (home.length)' in block
|
||||
assert 'if (away.length)' in block
|
||||
|
||||
65
tests/test_build88_complex_penalty_display.py
Normal file
65
tests/test_build88_complex_penalty_display.py
Normal file
@@ -0,0 +1,65 @@
|
||||
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
|
||||
Reference in New Issue
Block a user