Skip to content

Commit 5eea03a

Browse files
adding tests
1 parent f82840e commit 5eea03a

File tree

4 files changed

+64
-21
lines changed

4 files changed

+64
-21
lines changed

packages/models-library/src/models_library/api_schemas_directorv2/comp_runs.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from datetime import datetime
2-
from typing import Any, NamedTuple
2+
from typing import Annotated, Any, NamedTuple
33

44
from pydantic import (
55
BaseModel,
6+
BeforeValidator,
67
PositiveInt,
78
)
89

@@ -26,11 +27,17 @@ class ComputationRunRpcGetPage(NamedTuple):
2627
total: PositiveInt
2728

2829

30+
def _none_to_zero_float_pre_validator(value: Any):
31+
if value is None:
32+
return 0.0
33+
return value
34+
35+
2936
class ComputationTaskRpcGet(BaseModel):
3037
project_uuid: ProjectID
3138
node_id: NodeID
3239
state: RunningState
33-
progress: float
40+
progress: Annotated[float, BeforeValidator(_none_to_zero_float_pre_validator)]
3441
image: dict[str, Any]
3542
started_at: datetime | None
3643
ended_at: datetime | None

services/director-v2/src/simcore_service_director_v2/modules/db/repositories/comp_tasks/_core.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ async def list_computational_tasks_for_frontend_client(
9292

9393
base_select_query = (
9494
sa.select(
95-
comp_tasks.c.project_id,
95+
comp_tasks.c.project_id.label("project_uuid"),
9696
comp_tasks.c.node_id,
9797
comp_tasks.c.state,
9898
comp_tasks.c.progress,

services/director-v2/tests/unit/with_dbs/comp_scheduler/test_api_rpc_computations.py

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@
77
# pylint: disable=too-many-positional-arguments
88

99
from collections.abc import Awaitable, Callable
10+
from datetime import datetime, timezone
1011
from typing import Any
1112

12-
from models_library.api_schemas_directorv2.comp_runs import ComputationRunRpcGetPage
13+
from models_library.api_schemas_directorv2.comp_runs import (
14+
ComputationRunRpcGetPage,
15+
ComputationTaskRpcGetPage,
16+
)
1317
from models_library.projects import ProjectAtDB
18+
from models_library.projects_state import RunningState
1419
from servicelib.rabbitmq import RabbitMQRPCClient
1520
from servicelib.rabbitmq.rpc_interfaces.director_v2 import (
1621
computations as rpc_computations,
@@ -48,16 +53,14 @@
4853
# monkeypatch.setenv("S3_BUCKET_NAME", faker.pystr())
4954

5055

51-
async def test_get_computation_from_published_computation_task(
52-
# minimal_configuration: None,
56+
async def test_rpc_list_computation_runs_and_tasks(
5357
fake_workbench_without_outputs: dict[str, Any],
5458
fake_workbench_adjacency: dict[str, Any],
5559
registered_user: Callable[..., dict[str, Any]],
5660
project: Callable[..., Awaitable[ProjectAtDB]],
5761
create_pipeline: Callable[..., Awaitable[CompPipelineAtDB]],
5862
create_tasks: Callable[..., Awaitable[list[CompTaskAtDB]]],
5963
create_comp_run: Callable[..., Awaitable[CompRunsAtDB]],
60-
# async_client: httpx.AsyncClient,
6164
rpc_client: RabbitMQRPCClient,
6265
):
6366
user = registered_user()
@@ -67,10 +70,10 @@ async def test_get_computation_from_published_computation_task(
6770
dag_adjacency_list=fake_workbench_adjacency,
6871
)
6972
comp_tasks = await create_tasks(
70-
user=user, project=proj, state=StateType.PUBLISHED, progress=0
73+
user=user, project=proj, state=StateType.PUBLISHED, progress=None
7174
)
7275
comp_runs = await create_comp_run(
73-
user=user, project=proj, result=StateType.PUBLISHED
76+
user=user, project=proj, result=RunningState.PUBLISHED
7477
)
7578
assert comp_runs
7679

@@ -79,14 +82,46 @@ async def test_get_computation_from_published_computation_task(
7982
)
8083
assert output.total == 1
8184
assert isinstance(output, ComputationRunRpcGetPage)
85+
assert output.items[0].iteration == 1
8286

83-
# get_computation_url = httpx.URL(
84-
# f"/v2/computations/{proj.uuid}?user_id={user['id']}"
85-
# )
86-
# response = await async_client.get(get_computation_url)
87-
# assert response.status_code == status.HTTP_200_OK, response.text
88-
# returned_computation = ComputationGet.model_validate(response.json())
89-
# assert returned_computation
90-
# expected_stop_url = async_client.base_url.join(
91-
# f"/v2/computations/{proj.uuid}:stop?user_id={user['id']}"
92-
# )
87+
comp_runs_2 = await create_comp_run(
88+
user=user,
89+
project=proj,
90+
result=RunningState.PENDING,
91+
started=datetime.now(tz=timezone.utc),
92+
iteration=2,
93+
)
94+
output = await rpc_computations.list_computations_latest_iteration_page(
95+
rpc_client, product_name="osparc", user_id=user["id"]
96+
)
97+
assert output.total == 1
98+
assert isinstance(output, ComputationRunRpcGetPage)
99+
assert output.items[0].iteration == 2
100+
assert output.items[0].started_at is not None
101+
assert output.items[0].ended_at is None
102+
103+
comp_runs_3 = await create_comp_run(
104+
user=user,
105+
project=proj,
106+
result=RunningState.SUCCESS,
107+
started=datetime.now(tz=timezone.utc),
108+
ended=datetime.now(tz=timezone.utc),
109+
iteration=3,
110+
)
111+
output = await rpc_computations.list_computations_latest_iteration_page(
112+
rpc_client, product_name="osparc", user_id=user["id"]
113+
)
114+
assert output.total == 1
115+
assert isinstance(output, ComputationRunRpcGetPage)
116+
assert output.items[0].iteration == 3
117+
assert output.items[0].ended_at is not None
118+
119+
# Tasks
120+
121+
output = await rpc_computations.list_computations_latest_iteration_tasks_page(
122+
rpc_client, product_name="osparc", user_id=user["id"], project_id=proj.uuid
123+
)
124+
assert output
125+
assert output.total == 4
126+
assert isinstance(output, ComputationTaskRpcGetPage)
127+
assert len(output.items) == 4

services/director-v2/tests/unit/with_dbs/conftest.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from fastapi.encoders import jsonable_encoder
1919
from models_library.projects import ProjectAtDB, ProjectID
2020
from models_library.projects_nodes_io import NodeID
21+
from models_library.projects_state import RunningState
2122
from pydantic.main import BaseModel
2223
from simcore_postgres_database.models.comp_pipeline import StateType, comp_pipeline
2324
from simcore_postgres_database.models.comp_runs import comp_runs
@@ -193,7 +194,7 @@ async def _(
193194
"project_uuid": f"{project.uuid}",
194195
"user_id": user["id"],
195196
"iteration": 1,
196-
"result": StateType.NOT_STARTED,
197+
"result": RunningState.NOT_STARTED,
197198
"metadata": jsonable_encoder(run_metadata),
198199
"use_on_demand_clusters": False,
199200
}
@@ -247,7 +248,7 @@ async def _() -> PublishedProject:
247248

248249
@pytest.fixture
249250
async def published_project(
250-
publish_project: Callable[[], Awaitable[PublishedProject]]
251+
publish_project: Callable[[], Awaitable[PublishedProject]],
251252
) -> PublishedProject:
252253
return await publish_project()
253254

0 commit comments

Comments
 (0)