Skip to content

Commit ce16bc4

Browse files
committed
fix tests after refactoring
1 parent 9caa628 commit ce16bc4

File tree

7 files changed

+51
-32
lines changed

7 files changed

+51
-32
lines changed

services/api-server/src/simcore_service_api_server/_service_jobs.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@
2727
from .models.schemas.programs import Program
2828
from .models.schemas.solvers import Solver, SolverKeyId
2929
from .models.schemas.studies import StudyID
30+
from .services_http.director_v2 import DirectorV2Api
3031
from .services_http.solver_job_models_converters import (
32+
JobStatus,
3133
create_job_from_project,
3234
create_job_inputs_from_node_inputs,
35+
create_jobstatus_from_task,
3336
create_new_project_for_job,
3437
)
3538
from .services_http.webserver import AuthSession
@@ -45,6 +48,7 @@ class JobService:
4548
_web_rest_client: AuthSession
4649
_web_rpc_client: WbApiRpcClient
4750
_storage_rpc_client: StorageService
51+
_director2_api: DirectorV2Api
4852
_directorv2_rpc_client: DirectorV2Service
4953
_solver_service: SolverService
5054
user_id: UserID
@@ -260,3 +264,18 @@ async def create_solver_job(
260264
)
261265

262266
return job
267+
268+
async def inspect_solver_job(
269+
self,
270+
*,
271+
solver_key: SolverKeyId,
272+
version: VersionStr,
273+
job_id: JobID,
274+
):
275+
assert solver_key # nosec
276+
assert version # nosec
277+
task = await self._director2_api.get_computation(
278+
project_id=job_id, user_id=self.user_id
279+
)
280+
job_status: JobStatus = create_jobstatus_from_task(task)
281+
return job_status

services/api-server/src/simcore_service_api_server/api/dependencies/services.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
from models_library.products import ProductName
88
from models_library.users import UserID
99
from servicelib.rabbitmq import RabbitMQRPCClient
10-
from simcore_service_api_server._service_function_jobs import FunctionJobService
11-
from simcore_service_api_server._service_functions import FunctionService
1210

11+
from ..._service_function_jobs import FunctionJobService
12+
from ..._service_functions import FunctionService
1313
from ..._service_jobs import JobService
1414
from ..._service_programs import ProgramService
1515
from ..._service_solvers import SolverService
16+
from ...services_http.director_v2 import DirectorV2Api
1617
from ...services_http.webserver import AuthSession
1718
from ...services_rpc.catalog import CatalogService
1819
from ...services_rpc.director_v2 import DirectorV2Service
@@ -111,6 +112,7 @@ def get_job_service(
111112
web_rpc_api: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
112113
storage_service: Annotated[StorageService, Depends(get_storage_service)],
113114
directorv2_service: Annotated[DirectorV2Service, Depends(get_directorv2_service)],
115+
director2_api: Annotated[DirectorV2Api, Depends(get_api_client(DirectorV2Api))],
114116
user_id: Annotated[UserID, Depends(get_current_user_id)],
115117
product_name: Annotated[ProductName, Depends(get_product_name)],
116118
solver_service: Annotated[SolverService, Depends(get_solver_service)],
@@ -124,6 +126,7 @@ def get_job_service(
124126
_web_rpc_client=web_rpc_api,
125127
_storage_rpc_client=storage_service,
126128
_directorv2_rpc_client=directorv2_service,
129+
_director2_api=director2_api,
127130
_solver_service=solver_service,
128131
user_id=user_id,
129132
product_name=product_name,

services/api-server/src/simcore_service_api_server/api/routes/function_jobs_routes.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ async def function_job_status(
206206
function: Annotated[RegisteredFunction, Depends(get_function_from_functionjob)],
207207
stored_job_status: Annotated[FunctionJobStatus, Depends(get_stored_job_status)],
208208
director2_api: Annotated[DirectorV2Api, Depends(get_api_client(DirectorV2Api))],
209+
job_service: Annotated[JobService, Depends(get_job_service)],
209210
user_id: Annotated[UserID, Depends(get_current_user_id)],
210211
product_name: Annotated[ProductName, Depends(get_product_name)],
211212
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
@@ -231,8 +232,7 @@ async def function_job_status(
231232
solver_key=function.solver_key,
232233
version=function.solver_version,
233234
job_id=function_job.solver_job_id,
234-
user_id=user_id,
235-
director2_api=director2_api,
235+
job_service=job_service,
236236
)
237237
else:
238238
raise UnsupportedFunctionFunctionJobClassCombinationError(

services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs.py

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from pydantic.types import PositiveInt
1414

1515
from ..._service_jobs import JobService
16-
from ..._service_solvers import SolverService
1716
from ...exceptions.backend_errors import ProjectAlreadyStartedError
1817
from ...exceptions.service_errors_utils import DEFAULT_BACKEND_SERVICE_STATUS_CODES
1918
from ...models.basic_types import VersionStr
@@ -29,12 +28,9 @@
2928
from ...models.schemas.solvers import Solver, SolverKeyId
3029
from ...services_http.director_v2 import DirectorV2Api
3130
from ...services_http.jobs import replace_custom_metadata, start_project, stop_project
32-
from ...services_http.solver_job_models_converters import (
33-
create_jobstatus_from_task,
34-
)
3531
from ..dependencies.application import get_reverse_url_mapper
3632
from ..dependencies.authentication import get_current_user_id
37-
from ..dependencies.services import get_api_client, get_job_service, get_solver_service
33+
from ..dependencies.services import get_api_client, get_job_service
3834
from ..dependencies.webserver_http import AuthSession, get_webserver_session
3935
from ._constants import (
4036
FMSG_CHANGELOG_ADDED_IN_VERSION,
@@ -97,7 +93,6 @@ async def create_solver_job( # noqa: PLR0913
9793
solver_key: SolverKeyId,
9894
version: VersionStr,
9995
inputs: JobInputs,
100-
solver_service: Annotated[SolverService, Depends(get_solver_service)],
10196
job_service: Annotated[JobService, Depends(get_job_service)],
10297
url_for: Annotated[Callable, Depends(get_reverse_url_mapper)],
10398
hidden: Annotated[bool, Query()] = True,
@@ -109,24 +104,16 @@ async def create_solver_job( # noqa: PLR0913
109104
NOTE: This operation does **not** start the job
110105
"""
111106

112-
# ensures user has access to solver
113-
solver = await solver_service.get_solver(
107+
return await job_service.create_solver_job(
114108
solver_key=solver_key,
115-
solver_version=version,
116-
)
117-
job, _ = await job_service.create_project_marked_as_job(
118-
project_name=None,
119-
description=None,
120-
solver_or_program=solver,
109+
version=version,
121110
inputs=inputs,
122-
url_for=url_for,
123111
hidden=hidden,
124-
parent_project_uuid=x_simcore_parent_project_uuid,
125-
parent_node_id=x_simcore_parent_node_id,
112+
x_simcore_parent_project_uuid=x_simcore_parent_project_uuid,
113+
x_simcore_parent_node_id=x_simcore_parent_node_id,
114+
url_for=url_for,
126115
)
127116

128-
return job
129-
130117

131118
@router.delete(
132119
"/{solver_key:path}/releases/{version}/jobs/{job_id:uuid}",
@@ -193,6 +180,7 @@ async def start_job(
193180
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
194181
director2_api: Annotated[DirectorV2Api, Depends(get_api_client(DirectorV2Api))],
195182
webserver_api: Annotated[AuthSession, Depends(get_webserver_session)],
183+
job_service: Annotated[JobService, Depends(get_job_service)],
196184
cluster_id: Annotated[ # pylint: disable=unused-argument # noqa: ARG001
197185
ClusterID | None, Query(deprecated=True)
198186
] = None,
@@ -212,8 +200,7 @@ async def start_job(
212200
solver_key=solver_key,
213201
version=version,
214202
job_id=job_id,
215-
user_id=user_id,
216-
director2_api=director2_api,
203+
job_service=job_service,
217204
)
218205
return JSONResponse(
219206
status_code=status.HTTP_200_OK, content=jsonable_encoder(job_status)
@@ -222,8 +209,7 @@ async def start_job(
222209
solver_key=solver_key,
223210
version=version,
224211
job_id=job_id,
225-
user_id=user_id,
226-
director2_api=director2_api,
212+
job_service=job_service,
227213
)
228214

229215

@@ -268,15 +254,14 @@ async def inspect_job(
268254
solver_key: SolverKeyId,
269255
version: VersionStr,
270256
job_id: JobID,
271-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
272-
director2_api: Annotated[DirectorV2Api, Depends(get_api_client(DirectorV2Api))],
257+
job_service: Annotated[JobService, Depends(get_job_service)],
273258
) -> JobStatus:
274259
job_name = compose_job_resource_name(solver_key, version, job_id)
275260
_logger.debug("Inspecting Job '%s'", job_name)
276261

277-
task = await director2_api.get_computation(project_id=job_id, user_id=user_id)
278-
job_status: JobStatus = create_jobstatus_from_task(task)
279-
return job_status
262+
return await job_service.inspect_solver_job(
263+
solver_key=solver_key, version=version, job_id=job_id
264+
)
280265

281266

282267
@router.patch(

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ def mocked_list_function_jobs(offset: int, limit: int):
178178

179179
@pytest.mark.parametrize("job_status", ["SUCCESS", "FAILED", "STARTED"])
180180
async def test_get_function_job_status(
181+
mocked_app_dependencies: None,
181182
client: AsyncClient,
182183
mock_handler_in_functions_rpc_interface: Callable[[str, Any], None],
183184
mock_registered_project_function_job: RegisteredProjectFunctionJob,

services/api-server/tests/unit/service/conftest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from simcore_service_api_server._service_jobs import JobService
2020
from simcore_service_api_server._service_programs import ProgramService
2121
from simcore_service_api_server._service_solvers import SolverService
22+
from simcore_service_api_server.services_http.director_v2 import DirectorV2Api
2223
from simcore_service_api_server.services_http.webserver import AuthSession
2324
from simcore_service_api_server.services_rpc.catalog import CatalogService
2425
from simcore_service_api_server.services_rpc.director_v2 import DirectorV2Service
@@ -107,6 +108,11 @@ async def _create_project(project: ProjectCreateNew, **kwargs):
107108
return mock
108109

109110

111+
@pytest.fixture
112+
def director2_api(mocker: MockerFixture) -> DirectorV2Api:
113+
return mocker.AsyncMock(spec=DirectorV2Api)
114+
115+
110116
@pytest.fixture
111117
def catalog_service(
112118
mocked_rpc_client: MockType,
@@ -144,6 +150,7 @@ def job_service(
144150
director_v2_rpc_client: DirectorV2Service,
145151
storage_rpc_client: StorageService,
146152
wb_api_rpc_client: WbApiRpcClient,
153+
director2_api: DirectorV2Api,
147154
product_name: ProductName,
148155
user_id: UserID,
149156
solver_service: SolverService,
@@ -153,6 +160,7 @@ def job_service(
153160
_web_rpc_client=wb_api_rpc_client,
154161
_storage_rpc_client=storage_rpc_client,
155162
_directorv2_rpc_client=director_v2_rpc_client,
163+
_director2_api=director2_api,
156164
_solver_service=solver_service,
157165
user_id=user_id,
158166
product_name=product_name,

services/api-server/tests/unit/test_api_solver_jobs.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ def _get_pricing_unit_side_effect(
202202
],
203203
)
204204
async def test_start_solver_job_pricing_unit_with_payment(
205+
mocked_app_dependencies: None,
205206
client: AsyncClient,
206207
mocked_webserver_rest_api_base: MockRouter,
207208
mocked_directorv2_rest_api_base: MockRouter,
@@ -277,6 +278,7 @@ def _put_pricing_plan_and_unit_side_effect(
277278

278279

279280
async def test_get_solver_job_pricing_unit_no_payment(
281+
mocked_app_dependencies: None,
280282
client: AsyncClient,
281283
mocked_webserver_rest_api_base: MockRouter,
282284
mocked_directorv2_rest_api_base: MockRouter,
@@ -310,6 +312,7 @@ async def test_get_solver_job_pricing_unit_no_payment(
310312

311313

312314
async def test_start_solver_job_conflict(
315+
mocked_app_dependencies: None,
313316
client: AsyncClient,
314317
mocked_webserver_rest_api_base: MockRouter,
315318
mocked_directorv2_rest_api_base: MockRouter,

0 commit comments

Comments
 (0)