Skip to content

Commit e6eb80c

Browse files
committed
add new fixtures and model examples
1 parent 95de5a5 commit e6eb80c

File tree

2 files changed

+69
-15
lines changed

2 files changed

+69
-15
lines changed

packages/models-library/src/models_library/api_schemas_long_running_tasks/base.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ class TaskProgress(BaseModel):
2323
message: ProgressMessage = ""
2424
percent: ProgressPercent = 0.0
2525

26+
model_config = {
27+
"json_schema_extra": {
28+
"examples": [
29+
{
30+
"task_id": "3ac48b54-a48d-4c5e-a6ac-dcaddb9eaa59",
31+
"message": "Halfway done",
32+
"percent": 0.5,
33+
}
34+
]
35+
}
36+
}
37+
2638
# used to propagate progress updates internally
2739
_update_callback: Callable[["TaskProgress"], Awaitable[None]] | None = None
2840

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

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,78 @@
1010

1111

1212
@pytest.fixture
13-
def mock_task_manager_object(mocker: MockerFixture) -> MockType:
14-
"""
15-
Returns a TaskManager mock with example return values for each method.
16-
"""
17-
mock = mocker.Mock(spec=TaskManager)
13+
def submit_task_return_value() -> TaskUUID:
14+
return TaskUUID(_faker.uuid4())
15+
16+
17+
@pytest.fixture
18+
def cancel_task_return_value() -> None:
19+
return None
20+
1821

19-
# Example return values (replace with realistic objects as needed)
20-
mock.submit_task.return_value = TaskUUID(_faker.uuid4())
21-
mock.cancel_task.return_value = None
22-
mock.get_task_result.return_value = {"result": "example"}
22+
@pytest.fixture
23+
def get_task_result_return_value() -> dict:
24+
return {"result": "example"}
25+
26+
27+
@pytest.fixture
28+
def get_task_status_return_value() -> TaskStatus:
2329
status_extra = TaskStatus.model_config.get("json_schema_extra")
2430
assert status_extra is not None
2531
status_examples = status_extra.get("examples")
2632
assert isinstance(status_examples, list)
2733
assert len(status_examples) > 0
28-
mock.get_task_status.return_value = TaskStatus.model_validate(status_examples[0])
34+
return TaskStatus.model_validate(status_examples[0])
35+
36+
37+
@pytest.fixture
38+
def list_tasks_return_value() -> list[Task]:
2939
list_extra = Task.model_config.get("json_schema_extra")
3040
assert isinstance(list_extra, dict)
3141
list_examples = list_extra.get("examples")
3242
assert isinstance(list_examples, list)
3343
assert len(list_examples) > 0
34-
mock.list_tasks.return_value = [
35-
Task.model_validate(example) for example in list_examples
36-
]
37-
mock.set_task_progress.return_value = None
44+
return [Task.model_validate(example) for example in list_examples]
45+
46+
47+
@pytest.fixture
48+
def set_task_progress_return_value() -> None:
49+
return None
50+
51+
52+
@pytest.fixture
53+
def mock_task_manager_object(
54+
mocker: MockerFixture,
55+
submit_task_return_value,
56+
cancel_task_return_value,
57+
get_task_result_return_value,
58+
get_task_status_return_value,
59+
list_tasks_return_value,
60+
set_task_progress_return_value,
61+
) -> MockType:
62+
"""
63+
Returns a TaskManager mock with overridable return values for each method.
64+
If a return value is an Exception, the method will raise it.
65+
"""
66+
mock = mocker.Mock(spec=TaskManager)
67+
68+
def _set_return_or_raise(method, value):
69+
if isinstance(value, Exception):
70+
method.side_effect = lambda *a, **kw: (_ for _ in ()).throw(value)
71+
else:
72+
method.return_value = value
73+
74+
_set_return_or_raise(mock.submit_task, submit_task_return_value)
75+
_set_return_or_raise(mock.cancel_task, cancel_task_return_value)
76+
_set_return_or_raise(mock.get_task_result, get_task_result_return_value)
77+
_set_return_or_raise(mock.get_task_status, get_task_status_return_value)
78+
_set_return_or_raise(mock.list_tasks, list_tasks_return_value)
79+
_set_return_or_raise(mock.set_task_progress, set_task_progress_return_value)
3880
return mock
3981

4082

4183
@pytest.fixture
42-
def mock_task_manager_raising_factory(
84+
def mock_task_manager_object_raising_factory(
4385
mocker: MockerFixture,
4486
) -> Callable[[Exception], MockType]:
4587
def _factory(task_manager_exception: Exception) -> MockType:

0 commit comments

Comments
 (0)