Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion openadapt_capture/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ def record(
send_profile=send_profile,
window=window,
) as recorder:
recorder.wait_for_ready()
if not recorder.wait_for_ready():
print("Recording did not become ready. No successful capture was saved.")
raise SystemExit(1)
try:
while recorder.is_recording:
time.sleep(1)
Expand Down
48 changes: 48 additions & 0 deletions tests/test_cli_record.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"""Behavior tests for the public capture CLI recording path."""

from __future__ import annotations

import pytest

from openadapt_capture.cli import record


class _RecorderThatNeverBecomesReady:
"""Small recorder double for startup-failure behavior."""

def __init__(self, *args, **kwargs):
self.event_count = 0
self.exited = False

def __enter__(self):
return self

def __exit__(self, exc_type, exc, traceback):
self.exited = True
return False

def wait_for_ready(self):
return False


def test_record_refuses_when_recorder_never_becomes_ready(monkeypatch, tmp_path, capsys):
import openadapt_capture.recorder as recorder_module

recorder = None

def recorder_factory(*args, **kwargs):
nonlocal recorder
recorder = _RecorderThatNeverBecomesReady(*args, **kwargs)
return recorder

monkeypatch.setattr(recorder_module, "Recorder", recorder_factory)

with pytest.raises(SystemExit) as raised:
record(str(tmp_path / "capture"), video=False)

assert raised.value.code == 1
assert recorder is not None and recorder.exited
output = capsys.readouterr().out
assert "did not become ready" in output
assert "Recorded 0 events" not in output
assert "Saved to:" not in output