import pytest import hashlib from sqlalchemy import select from app.database import init_db from app.models.client import APIClient from unittest.mock import patch, MagicMock @pytest.mark.asyncio async def test_init_db_creates_default_client(): # Mock engine and AsyncSessionLocal with patch("app.database.engine") as mock_engine, \ patch("app.database.AsyncSessionLocal") as mock_session_factory: # Mock engine.begin() context manager mock_conn = AsyncMock() mock_engine.begin.return_value.__aenter__.return_value = mock_conn # Mock session behavior mock_session = AsyncMockSession() mock_session_factory.return_value.__aenter__.return_value = mock_session # Simulate empty table mock_result = MagicMock() mock_result.scalar_one_or_none.return_value = None mock_session.execute.return_value = mock_result await init_db() # Check if add was called for bootstrap client assert any(isinstance(call.args[0], APIClient) for call in mock_session.add.call_args_list) class AsyncMockSession: def __init__(self): self.add = MagicMock() self.commit = AsyncMock() self.execute = AsyncMock() self.close = AsyncMock() async def __aenter__(self): return self async def __aexit__(self, *args): pass class AsyncMock(MagicMock): async def __call__(self, *args, **kwargs): return super(AsyncMock, self).__call__(*args, **kwargs) def __await__(self): return self().__await__()