@@ -384,6 +384,52 @@ async def test_delete_subtree(tmpdir):
384
384
assert len (assets_after_delete ) == 2
385
385
386
386
387
+ @pytest .mark .asyncio
388
+ async def test_delete_asset_registered_twice (tmpdir ):
389
+ # Do not use client fixture here.
390
+ # The Context must be opened inside the test or we run into
391
+ # event loop crossing issues with the Postgres test.
392
+ tree = in_memory (readable_storage = [str (tmpdir )])
393
+ with Context .from_app (build_app (tree )) as context :
394
+ client = from_context (context )
395
+
396
+ for i in range (1 , 4 ):
397
+ with open (tmpdir / f"test_{ i } .csv" , "w" ) as file :
398
+ file .write (
399
+ """a, b, c
400
+ 1, 2, 3
401
+ 4, 5, 6
402
+ """
403
+ )
404
+ # a has children b1 and b2, which each contain arrays
405
+ a = client .create_container ("a" )
406
+ b1 = a .create_container ("b1" )
407
+ await register (b1 , tmpdir / "test_1.csv" )
408
+ await register (b1 , tmpdir / "test_2.csv" )
409
+ b2 = a .create_container ("b2" )
410
+ await register (b2 , tmpdir / "test_1.csv" )
411
+ await register (b2 , tmpdir / "test_3.csv" )
412
+
413
+ data_sources_before_delete = (
414
+ await tree .context .execute ("SELECT * from data_sources" )
415
+ ).all ()
416
+ assert len (data_sources_before_delete ) == 4
417
+ assets_after_delete = (await tree .context .execute ("SELECT * from assets" )).all ()
418
+ assert len (assets_after_delete ) == 3 # shared by two data sources
419
+
420
+ b2 .delete_tree ()
421
+
422
+ data_sources_after_delete = (
423
+ await tree .context .execute ("SELECT * from data_sources" )
424
+ ).all ()
425
+ assert len (data_sources_after_delete ) == 2
426
+ assets_after_delete = (await tree .context .execute ("SELECT * from assets" )).all ()
427
+ assert len (assets_after_delete ) == 2
428
+
429
+ client ["a" ]["b1" ]["test_1" ][:]
430
+ b2 .delete_tree ()
431
+
432
+
387
433
@pytest .mark .asyncio
388
434
async def test_delete_tree (tmpdir ):
389
435
# Do not use client fixture here.
0 commit comments