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