Skip to content

Commit d0b14e8

Browse files
add test
1 parent 1c5ced2 commit d0b14e8

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

services/web/server/src/simcore_service_webserver/api_keys/_api.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from servicelib.utils_secrets import generate_token_secret_key
1111

1212
from . import _db
13+
from .errors import ApiKeyNotFoundError
1314

1415
_PUNCTUATION_REGEX = re.compile(
1516
pattern="[" + re.escape(string.punctuation.replace("_", "")) + "]"
@@ -69,11 +70,14 @@ async def create_api_key(
6970

7071
async def get_api_key(
7172
app: web.Application, *, api_key_id: int, user_id: UserID, product_name: ProductName
72-
) -> ApiKeyGet | None:
73-
row = await _db.get(
73+
) -> ApiKeyGet:
74+
api_key = await _db.get(
7475
app, api_key_id=api_key_id, user_id=user_id, product_name=product_name
7576
)
76-
return ApiKeyGet.model_validate(row) if row else None
77+
if api_key is not None:
78+
return ApiKeyGet.model_validate(api_key) if api_key else None
79+
80+
raise ApiKeyNotFoundError(api_key_id=api_key_id)
7781

7882

7983
async def get_or_create_api_key(

services/web/server/src/simcore_service_webserver/api_keys/errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ class ApiKeysValueError(WebServerBaseError, ValueError):
66

77

88
class ApiKeyNotFoundError(ApiKeysValueError):
9-
msg_template = "API key not found. {reason}"
9+
msg_template = "API Key with ID '{api_key_id}' not found. {reason}"

services/web/server/tests/unit/with_dbs/01/test_api_keys.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from collections.abc import AsyncIterable
88
from datetime import timedelta
99
from http import HTTPStatus
10+
from http.client import HTTPException
1011

1112
import pytest
1213
import simcore_service_webserver.api_keys._db as db
@@ -201,3 +202,21 @@ async def test_get_or_create_api_key(
201202
await get_or_create_api_key(client.app, **options | {"name": "foo"})
202203
== created
203204
)
205+
206+
207+
@pytest.mark.parametrize(
208+
"user_role,expected",
209+
_get_user_access_parametrizations(status.HTTP_404_NOT_FOUND),
210+
)
211+
async def test_api_key_does_not_exists(
212+
client: TestClient,
213+
logged_user: UserInfoDict,
214+
user_role: UserRole,
215+
expected: HTTPException,
216+
disable_gc_manual_guest_users: None,
217+
):
218+
resp = await client.get("/v0/auth/api-keys/42")
219+
data, errors = await assert_status(resp, expected)
220+
221+
if not errors:
222+
assert data is None

0 commit comments

Comments
 (0)