From df6f65eda0148e88a1be5336e3258ad86e0d49fc Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Mon, 26 May 2025 00:20:22 +0100 Subject: [PATCH] replaybuffer start/stop now check status first add replaybuffer tests --- obsws_cli/replaybuffer.py | 10 ++++++++ tests/test_replaybuffer.py | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 tests/test_replaybuffer.py diff --git a/obsws_cli/replaybuffer.py b/obsws_cli/replaybuffer.py index 318e7f3..8c37289 100644 --- a/obsws_cli/replaybuffer.py +++ b/obsws_cli/replaybuffer.py @@ -18,6 +18,11 @@ def main(): @app.command('start | s') def start(ctx: typer.Context): """Start the replay buffer.""" + resp = ctx.obj.get_replay_buffer_status() + if resp.output_active: + err_console.print('Replay buffer is already active.') + raise typer.Exit(1) + ctx.obj.start_replay_buffer() out_console.print('Replay buffer started.') @@ -25,6 +30,11 @@ def start(ctx: typer.Context): @app.command('stop | st') def stop(ctx: typer.Context): """Stop the replay buffer.""" + resp = ctx.obj.get_replay_buffer_status() + if not resp.output_active: + err_console.print('Replay buffer is not active.') + raise typer.Exit(1) + ctx.obj.stop_replay_buffer() out_console.print('Replay buffer stopped.') diff --git a/tests/test_replaybuffer.py b/tests/test_replaybuffer.py new file mode 100644 index 0000000..e78d9a9 --- /dev/null +++ b/tests/test_replaybuffer.py @@ -0,0 +1,52 @@ +"""Unit tests for the replaybuffer command in the OBS WebSocket CLI.""" + +from typer.testing import CliRunner + +from obsws_cli.app import app + +runner = CliRunner(mix_stderr=False) + + +def test_replaybuffer_start(): + """Test the replay buffer start command.""" + resp = runner.invoke(app, ['replaybuffer', 'status']) + assert resp.exit_code == 0 + active = 'Replay buffer is active.' in resp.stdout + + resp = runner.invoke(app, ['replaybuffer', 'start']) + if active: + assert resp.exit_code != 0 + assert 'Replay buffer is already active.' in resp.stderr + else: + assert resp.exit_code == 0 + assert 'Replay buffer started.' in resp.stdout + + +def test_replaybuffer_stop(): + """Test the replay buffer stop command.""" + resp = runner.invoke(app, ['replaybuffer', 'status']) + assert resp.exit_code == 0 + active = 'Replay buffer is active.' in resp.stdout + + resp = runner.invoke(app, ['replaybuffer', 'stop']) + if not active: + assert resp.exit_code != 0 + assert 'Replay buffer is not active.' in resp.stderr + else: + assert resp.exit_code == 0 + assert 'Replay buffer stopped.' in resp.stdout + + +def test_replaybuffer_toggle(): + """Test the replay buffer toggle command.""" + resp = runner.invoke(app, ['replaybuffer', 'status']) + assert resp.exit_code == 0 + active = 'Replay buffer is active.' in resp.stdout + + resp = runner.invoke(app, ['replaybuffer', 'toggle']) + if active: + assert resp.exit_code == 0 + assert 'Replay buffer is not active.' in resp.stdout + else: + assert resp.exit_code == 0 + assert 'Replay buffer is active.' in resp.stdout