поправлен баланс с удалениями у двух команд
This commit is contained in:
24
tests/test_build87_penalty_strength_rebalance.py
Normal file
24
tests/test_build87_penalty_strength_rebalance.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
APP_JS = (ROOT / "ui_builder/static/app.js").read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def test_authoritative_strength_change_rebalances_penalty_targets():
|
||||||
|
start = APP_JS.index("function hockeyStoreGameControl")
|
||||||
|
end = APP_JS.index("async function hockeyLoadGameControl", start)
|
||||||
|
block = APP_JS[start:end]
|
||||||
|
assert "const strengthChanged" in block
|
||||||
|
assert "hockeyStrengthMappingSignature(previousControl) !== hockeyStrengthMappingSignature(payload)" in block
|
||||||
|
assert "rebalanceVmixPenaltyTargets({ force: true, hideUnused: true })" in block
|
||||||
|
assert "Penalty strength rebalance error" in block
|
||||||
|
|
||||||
|
|
||||||
|
def test_penalty_plan_still_routes_two_vs_one_to_advantage_side():
|
||||||
|
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
|
||||||
@@ -11132,8 +11132,20 @@ function renderHockeyPenaltyDashboard(node, component, runtime) {
|
|||||||
{ render }
|
{ render }
|
||||||
);
|
);
|
||||||
hockeyBackupPlayerSelectionValues(gameId, payload?.values || {});
|
hockeyBackupPlayerSelectionValues(gameId, payload?.values || {});
|
||||||
if (!previousControl || hockeyStrengthMappingSignature(previousControl) !== hockeyStrengthMappingSignature(payload)) {
|
const strengthChanged = !previousControl
|
||||||
|
|| hockeyStrengthMappingSignature(previousControl) !== hockeyStrengthMappingSignature(payload);
|
||||||
|
if (strengthChanged) {
|
||||||
hockeyRefreshVmixMappingForStrength(gameId, previousControl, payload).catch(() => {});
|
hockeyRefreshVmixMappingForStrength(gameId, previousControl, payload).catch(() => {});
|
||||||
|
// BUILD87: penalty routing depends on the recalculated numerical strength.
|
||||||
|
// The local penalty editor can rebalance a few milliseconds before the
|
||||||
|
// timer save response arrives, while state.data still contains the old
|
||||||
|
// 4x4/5x5 strength. Re-run the routing as soon as the authoritative
|
||||||
|
// control payload is stored so 2 penalties vs 1 immediately becomes
|
||||||
|
// 3x4/4x3 and the plate moves to the team with the advantage.
|
||||||
|
if (state.activeHockeyVmixTimerSteps.size) {
|
||||||
|
rebalanceVmixPenaltyTargets({ force: true, hideUnused: true })
|
||||||
|
.catch((error) => console.error("Penalty strength rebalance error", error));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (previousControl && hockeyTeamStateFlagSignature(previousControl) !== hockeyTeamStateFlagSignature(payload) && hockeyTeamStateScoreboardIsLive()) {
|
if (previousControl && hockeyTeamStateFlagSignature(previousControl) !== hockeyTeamStateFlagSignature(payload) && hockeyTeamStateScoreboardIsLive()) {
|
||||||
hockeySyncTeamStateOverlays({ force: true }).catch((error) => console.error("vMix team-state overlay sync error", error));
|
hockeySyncTeamStateOverlays({ force: true }).catch((error) => console.error("vMix team-state overlay sync error", error));
|
||||||
|
|||||||
Reference in New Issue
Block a user