diff --git a/tests/test_issue5175_macos_launchd_git.py b/tests/test_issue5175_macos_launchd_git.py index 4992ece7..d0d8d345 100644 --- a/tests/test_issue5175_macos_launchd_git.py +++ b/tests/test_issue5175_macos_launchd_git.py @@ -18,10 +18,7 @@ def test_run_git_uses_which_result_when_available(tmp_path): def test_run_git_falls_back_to_usr_bin_git_on_darwin(tmp_path): def fake_run(cmd, **kwargs): - if cmd[0] == 'git': - raise FileNotFoundError - if cmd[0] != '/usr/bin/git': - raise AssertionError(f'unexpected executable: {cmd[0]!r}') + assert cmd[0] == '/usr/bin/git' return MagicMock(returncode=0, stdout='v0.51.999\n', stderr='') with patch.object(updates.shutil, 'which', return_value=None), \ @@ -74,8 +71,7 @@ def test_run_git_returns_not_found_when_usr_bin_git_absent_on_darwin(tmp_path): def test_detect_webui_version_recovers_via_launchd_fallback(tmp_path): def fake_run(cmd, **kwargs): - if cmd[0] == 'git': - raise FileNotFoundError + assert cmd[0] == '/usr/bin/git' if cmd[1:] == ['describe', '--tags', '--always']: return MagicMock(returncode=0, stdout='v0.51.999\n', stderr='') if cmd[1:] == ['diff-index', '--quiet', 'HEAD', '--']: @@ -96,8 +92,7 @@ def test_check_repo_does_not_report_git_not_found_via_launchd_fallback(tmp_path) (tmp_path / '.git').mkdir() def fake_run(cmd, **kwargs): - if cmd[0] == 'git': - raise FileNotFoundError + assert cmd[0] == '/usr/bin/git' git_args = cmd[1:] if git_args == ['fetch', 'origin', '--tags', '--force']: return MagicMock(returncode=0, stdout='', stderr='') diff --git a/tests/test_updates.py b/tests/test_updates.py index 7f3526ca..083ef23e 100644 --- a/tests/test_updates.py +++ b/tests/test_updates.py @@ -288,7 +288,8 @@ def test_update_cache_is_scoped_by_agent_inclusion(tmp_path): def test_run_git_returns_stderr_on_failure(tmp_path): """When a git command fails, _run_git should return stderr (not empty string).""" - with patch('subprocess.run') as mock_run: + with patch.object(updates.shutil, 'which', return_value='C:/Tools/git.exe'), \ + patch('subprocess.run') as mock_run: mock_run.return_value = MagicMock( returncode=1, stdout='', @@ -302,7 +303,8 @@ def test_run_git_returns_stderr_on_failure(tmp_path): def test_run_git_returns_stdout_when_no_stderr(tmp_path): """If stderr is empty on failure, fall back to stdout.""" - with patch('subprocess.run') as mock_run: + with patch.object(updates.shutil, 'which', return_value='C:/Tools/git.exe'), \ + patch('subprocess.run') as mock_run: mock_run.return_value = MagicMock( returncode=128, stdout='Already up to date.', @@ -316,7 +318,8 @@ def test_run_git_returns_stdout_when_no_stderr(tmp_path): def test_run_git_returns_exit_code_when_no_output(tmp_path): """If both stdout and stderr are empty, report the exit code.""" - with patch('subprocess.run') as mock_run: + with patch.object(updates.shutil, 'which', return_value='C:/Tools/git.exe'), \ + patch('subprocess.run') as mock_run: mock_run.return_value = MagicMock( returncode=1, stdout='', @@ -330,7 +333,8 @@ def test_run_git_returns_exit_code_when_no_output(tmp_path): def test_run_git_uses_utf8_replacement_for_windows_console_output(tmp_path): """Git output can contain Unicode even when Windows' active code page cannot.""" - with patch('subprocess.run') as mock_run: + with patch.object(updates.shutil, 'which', return_value='C:/Tools/git.exe'), \ + patch('subprocess.run') as mock_run: mock_run.return_value = MagicMock(returncode=0, stdout='v0.51.184\n', stderr=None) out, ok = updates._run_git(['describe', '--tags'], tmp_path) @@ -344,7 +348,8 @@ def test_run_git_uses_utf8_replacement_for_windows_console_output(tmp_path): def test_run_git_handles_missing_stdout_after_decode_thread_failure(tmp_path): """A subprocess reader failure must not make version detection crash on import.""" - with patch('subprocess.run') as mock_run: + with patch.object(updates.shutil, 'which', return_value='C:/Tools/git.exe'), \ + patch('subprocess.run') as mock_run: mock_run.return_value = MagicMock(returncode=0, stdout=None, stderr=None) out, ok = updates._run_git(['diff', '--binary', 'HEAD', '--'], tmp_path)