Skip to content

Commit b471434

Browse files
committed
further corrections to tests
1 parent 51e0b95 commit b471434

File tree

2 files changed

+38
-15
lines changed

2 files changed

+38
-15
lines changed

packages/pytest-simcore/src/pytest_simcore/celery_library_mocks.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from collections.abc import Callable
2+
13
import pytest
24
from faker import Faker
35
from pytest_mock import MockerFixture, MockType
@@ -37,7 +39,9 @@ def mock_task_manager_object(mocker: MockerFixture) -> MockType:
3739

3840

3941
@pytest.fixture
40-
def mock_task_manager_raising_factory(mocker: MockerFixture):
42+
def mock_task_manager_raising_factory(
43+
mocker: MockerFixture,
44+
) -> Callable[[Exception], MockType]:
4145
def _factory(task_manager_exception: Exception) -> MockType:
4246
mock = mocker.Mock(spec=TaskManager)
4347

services/api-server/tests/unit/celery/test_tasks.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22
# pylint: disable=unused-argument
33

44

5+
from collections.abc import Callable
6+
from typing import Literal
7+
58
import pytest
9+
from celery.exceptions import CeleryError
610
from faker import Faker
711
from fastapi import status
812
from httpx import AsyncClient, BasicAuth
@@ -37,28 +41,43 @@ def _get_task_manager(app):
3741
return mock_task_manager_object
3842

3943

40-
@pytest.mark.parametrize(
41-
"expected_status_code",
42-
[status.HTTP_200_OK],
43-
)
4444
async def test_list_celery_tasks(
4545
mock_task_manager: MockType,
4646
client: AsyncClient,
4747
auth: BasicAuth,
48-
expected_status_code: int,
4948
):
5049

5150
response = await client.get("/v0/tasks", auth=auth)
52-
assert response.status_code == expected_status_code
51+
assert response.status_code == status.HTTP_200_OK
5352

54-
if response.status_code == status.HTTP_200_OK:
55-
result = ApiServerEnvelope[list[TaskGet]].model_validate_json(response.text)
56-
assert len(result.data) > 0
57-
assert all(isinstance(task, TaskGet) for task in result.data)
58-
task = result.data[0]
59-
assert task.abort_href == f"/v0/tasks/{task.task_id}:cancel"
60-
assert task.result_href == f"/v0/tasks/{task.task_id}/result"
61-
assert task.status_href == f"/v0/tasks/{task.task_id}"
53+
result = ApiServerEnvelope[list[TaskGet]].model_validate_json(response.text)
54+
assert len(result.data) > 0
55+
assert all(isinstance(task, TaskGet) for task in result.data)
56+
task = result.data[0]
57+
assert task.abort_href == f"/v0/tasks/{task.task_id}:cancel"
58+
assert task.result_href == f"/v0/tasks/{task.task_id}/result"
59+
assert task.status_href == f"/v0/tasks/{task.task_id}"
60+
61+
62+
@pytest.mark.parametrize(
63+
"method, url, celery_exception, expected_status_code",
64+
[
65+
("GET", "/v0/tasks", CeleryError(), status.HTTP_500_INTERNAL_SERVER_ERROR),
66+
],
67+
)
68+
async def test_celery_tasks_error_propagation(
69+
mock_task_manager_raising_factory: Callable[[Exception], None],
70+
client: AsyncClient,
71+
auth: BasicAuth,
72+
method: Literal["GET", "POST"],
73+
url: str,
74+
celery_exception: Exception,
75+
expected_status_code: int,
76+
):
77+
mock_task_manager_raising_factory(celery_exception)
78+
79+
response = await client.request(method=method, url=url, auth=auth)
80+
assert response.status_code == expected_status_code
6281

6382

6483
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)