mirror of
https://github.com/instructkr/claw-code.git
synced 2026-11-07 09:37:54 +01:00
Adds a conftest.py pytest fixture to explicitly clear the lru_cache for bash detection, addressing the monkeypatching hazard in a way that doesn't rely solely on comments. (Note: CI currently runs python -m unittest, but this keeps local pytest runners safe.) Also updates the bash check to run the execution probe directly inside the cached _check_bash_state, exposing the difference between 'no bash found' and 'bash present but execution failed' directly to the unittest skip reason.
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
import functools
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from tests._bash import get_bash_executable, require_bash, bash_skip_reason
|
|
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
PRE_PUSH_HOOK = REPO_ROOT / '.github' / 'hooks' / 'pre-push'
|
|
|
|
|
|
class PrePushHookContractTests(unittest.TestCase):
|
|
@unittest.skipUnless(require_bash(), bash_skip_reason())
|
|
def test_skip_escape_hatch_exits_successfully_with_stderr_notice(self) -> None:
|
|
bash_cmd = get_bash_executable() or 'bash'
|
|
env = os.environ.copy()
|
|
env['SKIP_CLAW_PRE_PUSH_BUILD'] = '1'
|
|
|
|
result = subprocess.run(
|
|
[bash_cmd, str(PRE_PUSH_HOOK)],
|
|
cwd=REPO_ROOT,
|
|
env=env,
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
|
|
self.assertEqual('', result.stdout)
|
|
self.assertIn('SKIP_CLAW_PRE_PUSH_BUILD=1', result.stderr)
|
|
self.assertIn('skipping cargo workspace build', result.stderr)
|
|
|
|
@unittest.skipUnless(require_bash(), bash_skip_reason())
|
|
def test_default_build_gate_uses_workspace_locked_cargo_build(self) -> None:
|
|
hook = PRE_PUSH_HOOK.read_text()
|
|
|
|
self.assertIn(
|
|
'cargo build --manifest-path rust/Cargo.toml --workspace --locked',
|
|
hook,
|
|
)
|
|
self.assertIn(
|
|
'build_cmd=(cargo build --manifest-path rust/Cargo.toml --workspace --locked)',
|
|
hook,
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|