mirror of
https://github.com/smittix/intercept.git
synced 2026-06-18 18:39:47 -07:00
test: address review feedback on fake_process fixture
- document str defaults / bytes for binary-mode callers - wire __exit__ to False so exceptions are not suppressed - exercise exited-process path through subprocess.run Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -147,6 +147,8 @@ def fake_process():
|
||||
Hand-rolled Popen mocks keep missing two things: __enter__ (subprocess.run
|
||||
wraps Popen in a context manager) and a communicate() tuple. Use this
|
||||
factory instead of building MagicMock processes inline.
|
||||
|
||||
Defaults are str (for text=True subprocesses); pass bytes explicitly for binary-mode callers.
|
||||
"""
|
||||
|
||||
def _make(returncode=0, stdout="", stderr="", running=True, pid=12345):
|
||||
@@ -160,6 +162,7 @@ def fake_process():
|
||||
proc.stderr.read.return_value = stderr
|
||||
proc.stdin = MagicMock()
|
||||
proc.__enter__.return_value = proc
|
||||
proc.__exit__.return_value = False
|
||||
return proc
|
||||
|
||||
return _make
|
||||
|
||||
@@ -18,7 +18,10 @@ class TestFakeProcess:
|
||||
assert proc.pid == 12345
|
||||
assert proc.communicate() == ("", "")
|
||||
|
||||
def test_exited_process(self, fake_process):
|
||||
proc = fake_process(running=False, returncode=1, stderr=b"device busy")
|
||||
assert proc.poll() == 1
|
||||
assert proc.stderr.read() == b"device busy"
|
||||
def test_exited_process_detected_via_run(self, fake_process):
|
||||
"""An exited process's returncode and stderr surface through subprocess.run."""
|
||||
proc = fake_process(running=False, returncode=1, stdout=b"", stderr=b"device busy")
|
||||
with patch("subprocess.Popen", return_value=proc):
|
||||
result = subprocess.run(["anything"], capture_output=True)
|
||||
assert result.returncode == 1
|
||||
assert result.stderr == b"device busy"
|
||||
|
||||
Reference in New Issue
Block a user