Files
hockey_new/tests/test_build199_goal_penalty.py

39 lines
1.9 KiB
Python

"""Executable goal/penalty rules and delivery regressions using actual JS."""
import os
from pathlib import Path
import shutil
import subprocess
import pytest
ROOT = Path(__file__).resolve().parents[1]
CASES = [
'manual_minor_goal', 'external_minor_goal', 'double_minor_first', 'double_minor_second',
'current_segment_shortest', 'major_stays', 'major_misconduct_stays', 'equal_strength_stays',
'shorthanded_goal_stays', 'empty_net_does_not_create_powerplay', 'unstarted_minor_stays',
'queued_minor_not_selected', 'coincidental_not_selected', 'equal_remaining_requires_choice',
'equal_remaining_selected', 'initial_load_and_big_jump', 'source_switch_is_baseline',
'sync_is_not_goal', 'duplicate_snapshot_rehydrates_history', 'viewer_never_changes_penalty',
'context_change_cancels_queued_goal', 'shootout_never_ends_minor', 'undo_restores_unedited_minor',
'undo_does_not_overwrite_edit', 'unknown_ack_is_not_replayed',
'goal_marker_survives_history_limit',
'external_known_annulment_restores', 'unrelated_external_negative_is_baseline',
'queued_old_zero_cannot_clear_new_assignment', 'queued_finish_preserves_foreign_overlay',
'orphan_field_zero_survives_other_field_reassignment',
'typed_manual_penalty_shot_never_releases_minor', 'armed_sql_penalty_shot_is_consumed_once',
'typed_sql_penalty_shot_never_releases_minor', 'viewer_cannot_arm_penalty_shot',
]
@pytest.mark.parametrize('case', CASES)
def test_goal_penalty(case):
node = shutil.which('node')
assert node, 'Node is required'
result = subprocess.run(
[node, str(ROOT / 'tests/build199_goal_penalty.cjs'), case,
os.environ.get('BUILD199_RUNTIME_ROOT', str(ROOT))],
cwd=ROOT, text=True, capture_output=True, timeout=20,
)
assert result.returncode == 0, result.stdout + result.stderr
assert f'PASS BUILD199 goal penalty: {case}' in result.stdout, result.stdout + result.stderr