@@ -186,7 +186,9 @@ async def random_project_with_files(
186186 aiopg_engine : Engine ,
187187 create_project : Callable [[], Awaitable [dict [str , Any ]]],
188188 create_project_node : Callable [..., Awaitable [NodeID ]],
189- create_simcore_file_id : Callable [[ProjectID , NodeID , str ], SimcoreS3FileID ],
189+ create_simcore_file_id : Callable [
190+ [ProjectID , NodeID , str , Optional [Path ]], SimcoreS3FileID
191+ ],
190192 upload_file : Callable [
191193 [ByteSize , str , str ], Awaitable [tuple [Path , SimcoreS3FileID ]]
192194 ],
@@ -207,23 +209,43 @@ async def _creator(
207209 src_projects_list : dict [NodeID , dict [SimcoreS3FileID , Path ]] = {}
208210 upload_tasks : deque [Awaitable ] = deque ()
209211 for _node_index in range (num_nodes ):
210- # NOTE: we put some more outputs in there to simuate a real case better
212+ # NOTE: we put some more outputs in there to simulate a real case better
213+ new_node_id = NodeID (faker .uuid4 ())
214+ output3_file_id = create_simcore_file_id (
215+ ProjectID (project ["uuid" ]),
216+ new_node_id ,
217+ faker .file_name (),
218+ Path ("outputs/output3" ),
219+ )
211220 src_node_id = await create_project_node (
212221 ProjectID (project ["uuid" ]),
213- outputs = {"output_1" : faker .pyint (), "output_2" : faker .pystr ()},
222+ new_node_id ,
223+ outputs = {
224+ "output_1" : faker .pyint (),
225+ "output_2" : faker .pystr (),
226+ "output_3" : f"{ output3_file_id } " ,
227+ },
214228 )
229+ assert src_node_id == new_node_id
230+
231+ # upload the output 3 and some random other files at the root of each node
215232 src_projects_list [src_node_id ] = {}
233+ src_file , _ = await upload_file (
234+ choice (file_sizes ), Path (output3_file_id ).name , output3_file_id
235+ )
236+ src_projects_list [src_node_id ][output3_file_id ] = src_file
216237
217238 async def _upload_file_and_update_project (project , src_node_id ):
218239 src_file_name = faker .file_name ()
219240 src_file_uuid = create_simcore_file_id (
220- ProjectID (project ["uuid" ]), src_node_id , src_file_name
241+ ProjectID (project ["uuid" ]), src_node_id , src_file_name , None
221242 )
222243 src_file , _ = await upload_file (
223244 choice (file_sizes ), src_file_name , src_file_uuid
224245 )
225246 src_projects_list [src_node_id ][src_file_uuid ] = src_file
226247
248+ # add a few random files in the node storage
227249 upload_tasks .extend (
228250 [
229251 _upload_file_and_update_project (project , src_node_id )
@@ -277,11 +299,14 @@ async def test_copy_folders_from_valid_project_with_one_large_file(
277299 for src_node_id in src_projects_list :
278300 dst_node_id = nodes_map .get (NodeIDStr (f"{ src_node_id } " ))
279301 assert dst_node_id
280- for src_file in src_projects_list [src_node_id ].values ():
302+ for src_file_id , src_file in src_projects_list [src_node_id ].items ():
281303 await assert_file_meta_data_in_db (
282304 aiopg_engine ,
283- file_id = create_simcore_file_id (
284- ProjectID (dst_project ["uuid" ]), NodeID (dst_node_id ), src_file .name
305+ file_id = parse_obj_as (
306+ SimcoreS3FileID ,
307+ f"{ src_file_id } " .replace (
308+ src_project ["uuid" ], dst_project ["uuid" ]
309+ ).replace (f"{ src_node_id } " , f"{ dst_node_id } " ),
285310 ),
286311 expected_entry_exists = True ,
287312 expected_file_size = src_file .stat ().st_size ,
@@ -317,15 +342,19 @@ async def test_copy_folders_from_valid_project(
317342 assert data == jsonable_encoder (
318343 await _get_updated_project (aiopg_engine , dst_project ["uuid" ])
319344 )
345+
320346 # check that file meta data was effectively copied
321347 for src_node_id in src_projects_list :
322348 dst_node_id = nodes_map .get (NodeIDStr (f"{ src_node_id } " ))
323349 assert dst_node_id
324- for src_file in src_projects_list [src_node_id ].values ():
350+ for src_file_id , src_file in src_projects_list [src_node_id ].items ():
325351 await assert_file_meta_data_in_db (
326352 aiopg_engine ,
327- file_id = create_simcore_file_id (
328- ProjectID (dst_project ["uuid" ]), NodeID (dst_node_id ), src_file .name
353+ file_id = parse_obj_as (
354+ SimcoreS3FileID ,
355+ f"{ src_file_id } " .replace (
356+ src_project ["uuid" ], dst_project ["uuid" ]
357+ ).replace (f"{ src_node_id } " , f"{ dst_node_id } " ),
329358 ),
330359 expected_entry_exists = True ,
331360 expected_file_size = src_file .stat ().st_size ,
0 commit comments