Files
transcription/tests/test_worker.py
T

54 lines
1.5 KiB
Python

import asyncio
import logging
import pytest
from transcription.worker import process_next_queued_job
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
@pytest.mark.asyncio
async def test_process_next_closes_initialized_provider(monkeypatch):
closed = False
class _Sources:
async def aclose(self):
nonlocal closed
closed = True
services = type("_Services", (), {"sources": _Sources()})()
monkeypatch.setattr("transcription.worker.ServiceBundle", lambda: services)
async def _no_job(*, services, session):
_ = (services, session)
return False
monkeypatch.setattr("transcription.worker.process_next_queued_job_workflow", _no_job)
assert await process_next_queued_job() is False
assert closed is True