Files
BanGUI/backend/tests/test_tasks/test_task_db.py

45 lines
1.2 KiB
Python

"""Tests for the shared background task database helper."""
from __future__ import annotations
from unittest.mock import AsyncMock, patch
import pytest
from app.tasks.db import task_db
class FakeSettings:
database_path = "/tmp/fake.db"
@pytest.mark.asyncio
async def test_task_db_opens_and_closes_connection() -> None:
"""``task_db`` must open a DB connection and close it after use."""
fake_db = AsyncMock()
fake_db.close = AsyncMock()
with patch("app.tasks.db.open_db", new_callable=AsyncMock, return_value=fake_db) as mock_open_db:
async with task_db(FakeSettings()) as db:
assert db is fake_db
mock_open_db.assert_awaited_once_with("/tmp/fake.db")
fake_db.close.assert_awaited_once()
@pytest.mark.asyncio
async def test_task_db_closes_connection_on_exception() -> None:
"""``task_db`` must close the connection even when the body raises."""
fake_db = AsyncMock()
fake_db.close = AsyncMock()
with patch(
"app.tasks.db.open_db",
new_callable=AsyncMock,
return_value=fake_db,
), pytest.raises(RuntimeError, match="boom"):
async with task_db(FakeSettings()):
raise RuntimeError("boom")
fake_db.close.assert_awaited_once()