Skip to content

Commit 1760fc0

Browse files
committed
🐛 Fix: Refactor app startup and engine initialization in test setup
1 parent 1ec22f1 commit 1760fc0

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

services/api-server/tests/unit/_with_db/test_repository_api_keys.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,55 @@
33
# pylint: disable=unused-variable
44
# pylint: disable=too-many-arguments
55

6-
from collections.abc import AsyncGenerator, Callable
6+
from collections.abc import AsyncGenerator, AsyncIterator, Callable
77

8-
import httpx
98
import pytest
9+
from asgi_lifespan import LifespanManager
10+
from fastapi import FastAPI
1011
from fastapi.security import HTTPBasicCredentials
1112
from models_library.api_schemas_api_server.api_keys import ApiKeyInDB
1213
from pydantic import PositiveInt
1314
from simcore_service_api_server.api.dependencies.authentication import (
1415
get_current_identity,
1516
)
17+
from simcore_service_api_server.clients.postgres import get_engine
1618
from simcore_service_api_server.repository.api_keys import ApiKeysRepository
1719
from simcore_service_api_server.repository.users import UsersRepository
1820
from sqlalchemy.ext.asyncio import AsyncEngine
1921

22+
MAX_TIME_FOR_APP_TO_STARTUP = 10
23+
MAX_TIME_FOR_APP_TO_SHUTDOWN = 10
24+
2025

2126
@pytest.fixture
22-
def async_engine_after_app_started(
23-
client: httpx.AsyncClient, # ensures app context is available
24-
async_engine: AsyncEngine,
25-
) -> AsyncEngine:
26-
return async_engine
27+
async def app_started(app: FastAPI, is_pdb_enabled: bool) -> AsyncIterator[FastAPI]:
28+
# LifespanManager will trigger app's startup&shutown event handlers
29+
async with LifespanManager(
30+
app,
31+
startup_timeout=None if is_pdb_enabled else MAX_TIME_FOR_APP_TO_STARTUP,
32+
shutdown_timeout=None if is_pdb_enabled else MAX_TIME_FOR_APP_TO_SHUTDOWN,
33+
):
34+
yield app
35+
36+
37+
@pytest.fixture
38+
async def async_engine(app_started: FastAPI) -> AsyncEngine:
39+
# Overrides
40+
return get_engine(app_started)
2741

2842

2943
@pytest.fixture
3044
def api_key_repo(
31-
async_engine_after_app_started: AsyncEngine,
45+
async_engine: AsyncEngine,
3246
) -> ApiKeysRepository:
33-
return ApiKeysRepository(db_engine=async_engine_after_app_started)
47+
return ApiKeysRepository(db_engine=async_engine)
3448

3549

3650
@pytest.fixture
3751
def users_repo(
38-
async_engine_after_app_started: AsyncEngine,
52+
async_engine: AsyncEngine,
3953
) -> UsersRepository:
40-
return UsersRepository(db_engine=async_engine_after_app_started)
54+
return UsersRepository(db_engine=async_engine)
4155

4256

4357
async def test_get_user_with_valid_credentials(

0 commit comments

Comments
 (0)