From 4b7e212db849bdfc71ac96d5dd1546259ad6dc82 Mon Sep 17 00:00:00 2001 From: leo <260626284+cameledev@users.noreply.github.com> Date: Wed, 2 Sep 2026 12:20:17 +0200 Subject: [PATCH] wip --- src/backend/core/recording/worker/mediator.py | 4 +- .../tests/recording/worker/test_mediator.py | 40 ++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/backend/core/recording/worker/mediator.py b/src/backend/core/recording/worker/mediator.py index 3ab93507..a0c0afe6 100644 --- a/src/backend/core/recording/worker/mediator.py +++ b/src/backend/core/recording/worker/mediator.py @@ -52,9 +52,11 @@ class WorkerServiceMediator: room_name = str(recording.room.id) encoding_options = (recording.options.get("encoding") or {}).get("resolved") + + start_kwargs = {"encoding_options": encoding_options} if encoding_options else {} try: worker_id = self._worker_service.start( - room_name, recording.id, encoding_options=encoding_options + room_name, recording.id, **start_kwargs ) except (WorkerRequestError, WorkerConnectionError, WorkerResponseError) as e: logger.exception( diff --git a/src/backend/core/tests/recording/worker/test_mediator.py b/src/backend/core/tests/recording/worker/test_mediator.py index 4d2e6d2f..f02443ef 100644 --- a/src/backend/core/tests/recording/worker/test_mediator.py +++ b/src/backend/core/tests/recording/worker/test_mediator.py @@ -47,10 +47,11 @@ def test_start_recording_success(mock_update_metadata, mediator, mock_worker_ser ) mediator.start(mock_recording) - # Verify worker service call + # Verify worker service call: no per-recording encoding, so the keyword is + # omitted entirely and workers predating it stay callable. expected_room_name = str(mock_recording.room.id) mock_worker_service.start.assert_called_once_with( - expected_room_name, mock_recording.id, encoding_options=None + expected_room_name, mock_recording.id ) # Verify recording updates @@ -96,6 +97,41 @@ def test_start_recording_passes_resolved_encoding( ) +@mock.patch("core.services.room_management.RoomManagement.update_metadata") +def test_start_recording_with_worker_lacking_encoding_options(mock_update_metadata): + """A worker predating the `encoding_options` keyword still starts a recording.""" + + class LegacyWorkerService: + """Worker stuck on the former start(room_id, recording_id) signature.""" + + hrid = "legacy-worker" + + def __init__(self): + self.calls = [] + + def start(self, room_id, recording_id): + """Record the call and return a worker id.""" + self.calls.append((room_id, recording_id)) + return "legacy-worker-123" + + def stop(self, worker_id): + """Unused here, part of the worker service interface.""" + return "STOPPED" + + worker_service = LegacyWorkerService() + mock_recording = RecordingFactory( + status=RecordingStatusChoices.INITIATED, worker_id=None + ) + + WorkerServiceMediator(worker_service).start(mock_recording) + + assert worker_service.calls == [(str(mock_recording.room.id), mock_recording.id)] + + mock_recording.refresh_from_db() + assert mock_recording.worker_id == "legacy-worker-123" + assert mock_recording.status == RecordingStatusChoices.ACTIVE + + @pytest.mark.parametrize( "error_class", [WorkerRequestError, WorkerConnectionError, WorkerResponseError] )