@@ -295,3 +295,57 @@ def test_upload_file_content(self):
295295 self .assertEqual (kwargs ["persno" ], "tester" )
296296 self .assertEqual (kwargs ["sha256" ], "deadbeef" )
297297 self .assertEqual (kwargs ["delete_derived_files" ], False )
298+
299+ def test_abort_upload (self ):
300+ presigned = PresignedWriteUrls (
301+ blob_id = "blob123" ,
302+ urls = ["https://upload.url/1" ],
303+ chunksize = 4 ,
304+ headers = {"Authorization" : "Bearer token" },
305+ )
306+ with patch .object (self .service , "request" , return_value = None ) as mock_request :
307+ self .service ._abort_upload (
308+ file_object_id = "file123" ,
309+ lock_id = "lockid" ,
310+ persno = "tester" ,
311+ presigned_write_urls = presigned ,
312+ )
313+ mock_request .assert_called_once ()
314+ args , kwargs = mock_request .call_args
315+ self .assertIn ("endpoint" , kwargs )
316+ self .assertTrue ("abort" in kwargs ["endpoint" ])
317+ self .assertEqual (kwargs ["method" ], "POST" )
318+ self .assertEqual (kwargs ["json" ]["lock_id" ], "lockid" )
319+ self .assertEqual (kwargs ["json" ]["persno" ], "tester" )
320+ self .assertEqual (kwargs ["json" ]["presigned_write_urls" ], presigned .model_dump ())
321+
322+ def test_upload_file_content_aborts_on_error (self ):
323+ # Patch internal methods to simulate error and check abort
324+ with (
325+ patch .object (self .service , "_get_stream_size" , return_value = 4 ),
326+ patch .object (self .service , "_get_presigned_write_urls" ) as mock_presigned ,
327+ patch .object (self .service , "_upload_from_stream" , side_effect = Exception ("upload error" )),
328+ patch .object (self .service , "_abort_upload" ) as mock_abort ,
329+ ):
330+ mock_presigned .return_value = PresignedWriteUrls (
331+ blob_id = "blob123" ,
332+ urls = ["https://upload.url/1" , "https://upload.url/2" ],
333+ chunksize = 2 ,
334+ headers = {"Authorization" : "Bearer token" },
335+ )
336+ stream = io .BytesIO (b"abcd" )
337+ with self .assertRaises (Exception ) as cm :
338+ self .service .upload_file_content (
339+ file_object_id = "file123" ,
340+ stream = stream ,
341+ persno = "tester" ,
342+ check_access = True ,
343+ filesize = None ,
344+ delete_derived_files = False ,
345+ )
346+ self .assertEqual (str (cm .exception ), "upload error" )
347+ mock_abort .assert_called_once ()
348+ args , kwargs = mock_abort .call_args
349+ self .assertEqual (kwargs ["file_object_id" ], "file123" )
350+ self .assertEqual (kwargs ["persno" ], "tester" )
351+ self .assertEqual (kwargs ["presigned_write_urls" ], mock_presigned .return_value )
0 commit comments