generated from john/python-template
54 lines
1.5 KiB
Python
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
|