Skip to content

Commit 8ed5bbd

Browse files
committed
start implementing test for getting function job status
1 parent fc7b39e commit 8ed5bbd

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

services/api-server/tests/unit/api_functions/test_api_routers_function_jobs.py

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,33 @@
88

99
import httpx
1010
import pytest
11+
import simcore_service_api_server.api.routes.function_jobs_routes as function_jobs_routes
12+
from celery_library.task_manager import CeleryTaskManager
13+
from faker import Faker
14+
from fastapi import FastAPI
1115
from httpx import AsyncClient
1216
from models_library.api_schemas_webserver.functions import (
1317
ProjectFunctionJob,
1418
RegisteredProjectFunctionJob,
1519
)
16-
from models_library.functions import FunctionJobStatus, RegisteredProjectFunction
20+
from models_library.functions import (
21+
FunctionJobStatus,
22+
RegisteredProjectFunction,
23+
)
1724
from models_library.products import ProductName
25+
from models_library.progress_bar import ProgressReport, ProgressStructuredMessage
26+
from models_library.projects import ProjectID
1827
from models_library.projects_state import RunningState
1928
from models_library.rest_pagination import PageMetaInfoLimitOffset
2029
from models_library.users import UserID
2130
from pytest_mock import MockerFixture, MockType
2231
from servicelib.aiohttp import status
32+
from servicelib.celery.models import TaskFilter, TaskState, TaskStatus, TaskUUID
2333
from simcore_service_api_server._meta import API_VTAG
2434
from simcore_service_api_server.models.schemas.jobs import JobStatus
2535

36+
_faker = Faker()
37+
2638

2739
async def test_delete_function_job(
2840
client: AsyncClient,
@@ -179,19 +191,59 @@ def mocked_list_function_jobs(offset: int, limit: int):
179191

180192

181193
@pytest.mark.parametrize("job_status", ["SUCCESS", "FAILED", "STARTED"])
194+
@pytest.mark.parametrize("project_job_id", [None, ProjectID(_faker.uuid4())])
195+
@pytest.mark.parametrize("job_creation_task_id", [None, TaskUUID(_faker.uuid4())])
182196
async def test_get_function_job_status(
197+
app: FastAPI,
183198
mocked_app_dependencies: None,
184199
client: AsyncClient,
200+
mocker: MockerFixture,
185201
mock_handler_in_functions_rpc_interface: Callable[[str, Any], None],
186202
mock_registered_project_function_job: RegisteredProjectFunctionJob,
187203
mock_registered_project_function: RegisteredProjectFunction,
188204
mock_method_in_jobs_service: Callable[[str, Any], None],
189205
auth: httpx.BasicAuth,
190206
job_status: str,
207+
project_job_id: ProjectID,
208+
job_creation_task_id: TaskUUID | None,
191209
) -> None:
192210

211+
def _mock_task_manager(*args, **kwargs) -> CeleryTaskManager:
212+
async def _get_task_status(
213+
task_uuid: TaskUUID, task_filter: TaskFilter
214+
) -> TaskStatus:
215+
assert task_uuid == job_creation_task_id
216+
return TaskStatus(
217+
task_uuid=task_uuid,
218+
task_state=TaskState.STARTED,
219+
progress_report=ProgressReport(
220+
actual_value=0.5,
221+
total=1.0,
222+
attempt=1,
223+
unit=None,
224+
message=ProgressStructuredMessage.model_validate(
225+
ProgressStructuredMessage.model_config["json_schema_extra"][
226+
"examples"
227+
][0]
228+
),
229+
),
230+
)
231+
232+
obj = mocker.Mock(spec=CeleryTaskManager)
233+
obj.get_task_status = _get_task_status
234+
return obj
235+
236+
mocker.patch.object(function_jobs_routes, "get_task_manager", _mock_task_manager)
237+
193238
mock_handler_in_functions_rpc_interface(
194-
"get_function_job", mock_registered_project_function_job
239+
"get_function_job",
240+
mock_registered_project_function_job.model_copy(
241+
update={
242+
"user_id": ANY,
243+
"project_job_id": project_job_id,
244+
"job_creation_task_id": job_creation_task_id,
245+
}
246+
),
195247
)
196248
mock_handler_in_functions_rpc_interface(
197249
"get_function", mock_registered_project_function

0 commit comments

Comments
 (0)