@@ -80,6 +80,13 @@ async def delete_trade(self, trade_id):
8080 if self .mode == "delete-error" :
8181 raise RuntimeError ("delete failed" )
8282
83+ async def delete_batch_trades (self , trade_ids ):
84+ if not trade_ids :
85+ raise ValueError ("No trade IDs provided" )
86+ if self .mode == "delete-error" :
87+ raise RuntimeError ("delete failed" )
88+ return len (trade_ids )
89+
8390
8491class FakeCsvImportInteractor :
8592 def __init__ (self , mode = "happy" ):
@@ -337,3 +344,47 @@ def test_trade_create_update_delete_generic_exception_paths(authed_client, monke
337344 _patch_trade_interactor (monkeypatch , FakeTradeInteractor (mode = "delete-error" ))
338345 delete = authed_client .delete (f"/api/v1/trades/{ uuid4 ()} " )
339346 assert delete .status_code == 400
347+
348+
349+ @pytest .mark .integration
350+ @pytest .mark .happy_path
351+ def test_bulk_delete_trades (authed_client , monkeypatch ):
352+ interactor = FakeTradeInteractor ()
353+ _patch_trade_interactor (monkeypatch , interactor )
354+ trade_ids = [str (uuid4 ()), str (uuid4 ()), str (uuid4 ())]
355+
356+ response = authed_client .post (
357+ "/api/v1/trades/bulk/delete" ,
358+ json = {"trade_ids" : trade_ids },
359+ )
360+
361+ assert response .status_code == 204
362+
363+
364+ @pytest .mark .integration
365+ @pytest .mark .edge_case
366+ def test_bulk_delete_trades_empty_list (authed_client , monkeypatch ):
367+ interactor = FakeTradeInteractor ()
368+ _patch_trade_interactor (monkeypatch , interactor )
369+
370+ response = authed_client .post (
371+ "/api/v1/trades/bulk/delete" ,
372+ json = {"trade_ids" : []},
373+ )
374+
375+ assert response .status_code == 400
376+
377+
378+ @pytest .mark .integration
379+ @pytest .mark .grumpy_path
380+ def test_bulk_delete_trades_error (authed_client , monkeypatch ):
381+ interactor = FakeTradeInteractor (mode = "delete-error" )
382+ _patch_trade_interactor (monkeypatch , interactor )
383+ trade_ids = [str (uuid4 ()), str (uuid4 ())]
384+
385+ response = authed_client .post (
386+ "/api/v1/trades/bulk/delete" ,
387+ json = {"trade_ids" : trade_ids },
388+ )
389+
390+ assert response .status_code == 400
0 commit comments