import asyncio import logging import pytest from transcription.worker import run_worker_loop @pytest.mark.asyncio async def test_run_worker_loop_survives_process_next_exception(monkeypatch, caplog): calls = 0 stop_event = asyncio.Event() async def _fake_process_next_queued_job(*, session=None, session_factory=None): nonlocal calls _ = (session, session_factory) calls += 1 if calls == 1: raise RuntimeError("boom") stop_event.set() return False monkeypatch.setattr("transcription.worker.process_next_queued_job", _fake_process_next_queued_job) with caplog.at_level(logging.ERROR): await run_worker_loop(stop_event=stop_event, poll_interval_seconds=0) assert calls == 2 assert "Worker loop exception" in caplog.text