|
7 | 7 |
|
8 | 8 | import httpx |
9 | 9 | import pytest |
| 10 | +from fastapi.security import HTTPBasicCredentials |
10 | 11 | from models_library.api_schemas_api_server.api_keys import ApiKeyInDB |
11 | 12 | from pydantic import PositiveInt |
| 13 | +from simcore_service_api_server.api.dependencies.authentication import ( |
| 14 | + get_current_identity, |
| 15 | +) |
12 | 16 | from simcore_service_api_server.repository.api_keys import ApiKeysRepository |
| 17 | +from simcore_service_api_server.repository.users import UsersRepository |
13 | 18 | from sqlalchemy.ext.asyncio import AsyncEngine |
14 | 19 |
|
15 | 20 |
|
16 | 21 | @pytest.fixture |
17 | | -def api_key_repo( |
| 22 | +def async_engine_after_app_started( |
18 | 23 | client: httpx.AsyncClient, # ensures app context is available |
19 | 24 | async_engine: AsyncEngine, |
| 25 | +) -> AsyncEngine: |
| 26 | + return async_engine |
| 27 | + |
| 28 | + |
| 29 | +@pytest.fixture |
| 30 | +def api_key_repo( |
| 31 | + async_engine_after_app_started: AsyncEngine, |
20 | 32 | ) -> ApiKeysRepository: |
| 33 | + return ApiKeysRepository(db_engine=async_engine_after_app_started) |
| 34 | + |
21 | 35 |
|
22 | | - return ApiKeysRepository(db_engine=async_engine) |
| 36 | +@pytest.fixture |
| 37 | +def users_repo( |
| 38 | + async_engine_after_app_started: AsyncEngine, |
| 39 | +) -> UsersRepository: |
| 40 | + return UsersRepository(db_engine=async_engine_after_app_started) |
23 | 41 |
|
24 | 42 |
|
25 | 43 | async def test_get_user_with_valid_credentials( |
@@ -56,3 +74,27 @@ async def test_get_user_with_invalid_credentials( |
56 | 74 | # Assert |
57 | 75 | assert result is None |
58 | 76 | break |
| 77 | + |
| 78 | + |
| 79 | +async def test_rest_dependency_authentication( |
| 80 | + api_key_repo: ApiKeysRepository, |
| 81 | + users_repo: UsersRepository, |
| 82 | + create_fake_api_keys: Callable[[PositiveInt], AsyncGenerator[ApiKeyInDB, None]], |
| 83 | +): |
| 84 | + |
| 85 | + # Generate a fake API key |
| 86 | + async for api_key_in_db in create_fake_api_keys(1): |
| 87 | + # Act |
| 88 | + result = await get_current_identity( |
| 89 | + apikeys_repo=api_key_repo, |
| 90 | + users_repo=users_repo, |
| 91 | + credentials=HTTPBasicCredentials( |
| 92 | + username=api_key_in_db.api_key, password=api_key_in_db.api_secret |
| 93 | + ), |
| 94 | + ) |
| 95 | + |
| 96 | + # Assert |
| 97 | + assert result is not None |
| 98 | + assert result.user_id == api_key_in_db.user_id |
| 99 | + assert result.product_name == api_key_in_db.product_name |
| 100 | + break |
0 commit comments