Skip to content

Commit a47e4c8

Browse files
fix: folder body
1 parent 1ceff4d commit a47e4c8

File tree

1 file changed

+48
-17
lines changed

1 file changed

+48
-17
lines changed

services/storage/tests/unit/test_rpc_handlers_simcore_s3.py

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from models_library.api_schemas_webserver.storage import PathToExport
3636
from models_library.basic_types import SHA256Str
3737
from models_library.products import ProductName
38-
from models_library.projects_nodes_io import NodeID, NodeIDStr, SimcoreS3FileID
38+
from models_library.projects_nodes_io import NodeID, SimcoreS3FileID
3939
from models_library.users import UserID
4040
from pydantic import ByteSize, TypeAdapter
4141
from pytest_mock import MockerFixture
@@ -72,22 +72,35 @@ async def _request_copy_folders(
7272
rpc_client: RabbitMQRPCClient,
7373
user_id: UserID,
7474
product_name: ProductName,
75-
source_project: dict[str, Any],
75+
src_project: dict[str, Any],
76+
src_project_nodes: dict[NodeID, dict[str, Any]],
7677
dst_project: dict[str, Any],
78+
dst_project_nodes: dict[NodeID, dict[str, Any]],
7779
nodes_map: dict[NodeID, NodeID],
7880
*,
7981
client_timeout: datetime.timedelta = datetime.timedelta(seconds=60),
8082
) -> dict[str, Any]:
8183
with log_context(
8284
logging.INFO,
83-
f"Copying folders from {source_project['uuid']} to {dst_project['uuid']}",
85+
f"Copying folders from {src_project['uuid']} to {dst_project['uuid']}",
8486
) as ctx:
87+
source = src_project | {
88+
"workbench": {
89+
f"{node_id}": node for node_id, node in src_project_nodes.items()
90+
}
91+
}
92+
destination = dst_project | {
93+
"workbench": {
94+
f"{node_id}": node for node_id, node in dst_project_nodes.items()
95+
}
96+
}
97+
8598
async_job_get, async_job_name = await copy_folders_from_project(
8699
rpc_client,
87100
user_id=user_id,
88101
product_name=product_name,
89102
body=FoldersBody(
90-
source=source_project, destination=dst_project, nodes_map=nodes_map
103+
source=source, destination=destination, nodes_map=nodes_map
91104
),
92105
)
93106

@@ -132,7 +145,9 @@ async def test_copy_folders_from_non_existing_project(
132145
user_id,
133146
product_name,
134147
incorrect_src_project,
148+
{},
135149
dst_project,
150+
{},
136151
nodes_map={},
137152
)
138153

@@ -144,7 +159,9 @@ async def test_copy_folders_from_non_existing_project(
144159
user_id,
145160
product_name,
146161
src_project,
162+
{},
147163
incorrect_dst_project,
164+
{},
148165
nodes_map={},
149166
)
150167

@@ -167,7 +184,9 @@ async def test_copy_folders_from_empty_project(
167184
user_id,
168185
product_name,
169186
src_project,
187+
{},
170188
dst_project,
189+
{},
171190
nodes_map={},
172191
)
173192
assert data == jsonable_encoder(dst_project)
@@ -234,25 +253,28 @@ async def test_copy_folders_from_valid_project_with_one_large_file(
234253
project_params
235254
)
236255
# 2. create a dst project without files
237-
dst_project, _, nodes_map = clone_project_data(src_project, src_project_nodes)
256+
dst_project, dst_project_nodes, nodes_map = clone_project_data(
257+
src_project, src_project_nodes
258+
)
238259
dst_project = await create_project(**dst_project)
239-
# copy the project files
260+
240261
data = await _request_copy_folders(
241262
storage_rabbitmq_rpc_client,
242263
user_id,
243264
product_name,
244265
src_project,
266+
src_project_nodes,
245267
dst_project,
268+
dst_project_nodes,
246269
nodes_map=nodes_map,
247270
)
271+
248272
assert data == jsonable_encoder(
249273
await get_updated_project(sqlalchemy_async_engine, dst_project["uuid"])
250274
)
251275
# check that file meta data was effectively copied
252276
for src_node_id in src_projects_list:
253-
dst_node_id = nodes_map.get(
254-
TypeAdapter(NodeIDStr).validate_python(f"{src_node_id}")
255-
)
277+
dst_node_id = nodes_map.get(src_node_id)
256278
assert dst_node_id
257279
for src_file_id, src_file in src_projects_list[src_node_id].items():
258280
path: Any = src_file["path"]
@@ -333,26 +355,29 @@ async def test_copy_folders_from_valid_project(
333355
project_params
334356
)
335357
# 2. create a dst project without files
336-
dst_project, _, nodes_map = clone_project_data(src_project, src_project_nodes)
358+
dst_project, dst_project_nodes, nodes_map = clone_project_data(
359+
src_project, src_project_nodes
360+
)
337361
dst_project = await create_project(**dst_project)
338362
# copy the project files
339363
data = await _request_copy_folders(
340364
storage_rabbitmq_rpc_client,
341365
user_id,
342366
product_name,
343367
src_project,
368+
src_project_nodes,
344369
dst_project,
370+
dst_project_nodes,
345371
nodes_map=nodes_map,
346372
)
373+
data.pop("workbench", None) # remove workbench from the data
347374
assert data == jsonable_encoder(
348375
await get_updated_project(sqlalchemy_async_engine, dst_project["uuid"])
349376
)
350377

351378
# check that file meta data was effectively copied
352379
for src_node_id in src_projects_list:
353-
dst_node_id = nodes_map.get(
354-
TypeAdapter(NodeIDStr).validate_python(f"{src_node_id}")
355-
)
380+
dst_node_id = nodes_map.get(src_node_id)
356381
assert dst_node_id
357382
for src_file_id, src_file in src_projects_list[src_node_id].items():
358383
path: Any = src_file["path"]
@@ -389,23 +414,29 @@ async def _create_and_delete_folders_from_project(
389414
*,
390415
client_timeout: datetime.timedelta = datetime.timedelta(seconds=60),
391416
) -> None:
392-
destination_project, _, nodes_map = clone_project_data(project, project_nodes)
393-
await project_db_creator(**destination_project)
417+
dst_project, dst_project_nodes, nodes_map = clone_project_data(
418+
project, project_nodes
419+
)
420+
await project_db_creator(**dst_project)
394421

395422
# creating a copy
396423
data = await _request_copy_folders(
397424
rpc_client,
398425
user_id,
399426
product_name,
400427
project,
401-
destination_project,
428+
project_nodes,
429+
dst_project,
430+
dst_project_nodes,
402431
nodes_map=nodes_map,
403432
client_timeout=client_timeout,
404433
)
405434

435+
data.pop("workbench", None) # remove workbench from the data
436+
406437
# data should be equal to the destination project, and all store entries should point to simcore.s3
407438
# NOTE: data is jsonized where destination project is not!
408-
assert jsonable_encoder(destination_project) == data
439+
assert jsonable_encoder(dst_project) == data
409440

410441
project_id = data["uuid"]
411442

0 commit comments

Comments
 (0)