@@ -40,7 +40,7 @@ describe('DualBlobStorage', () => {
4040 } ) ;
4141
4242 expect ( primary . deleteObject ) . not . toHaveBeenCalled ( ) ;
43- expect ( secondary . deleteObject ) . toHaveBeenCalledWith ( { key : 'k' , abortSignal : undefined } ) ;
43+ expect ( secondary . deleteObject ) . toHaveBeenCalledWith ( { key : 'k' } ) ;
4444 } ) ;
4545
4646 test ( 'rejects when secondary fails and rolls back primary' , async ( ) => {
@@ -56,9 +56,25 @@ describe('DualBlobStorage', () => {
5656 errors : [ secondaryError ] ,
5757 } ) ;
5858
59- expect ( primary . deleteObject ) . toHaveBeenCalledWith ( { key : 'k' , abortSignal : undefined } ) ;
59+ expect ( primary . deleteObject ) . toHaveBeenCalledWith ( { key : 'k' } ) ;
6060 expect ( secondary . deleteObject ) . not . toHaveBeenCalled ( ) ;
6161 } ) ;
62+ test ( 'includes rollback errors in aggregate when rollback also fails' , async ( ) => {
63+ const secondaryError = new Error ( 'secondary write failed' ) ;
64+ const rollbackError = new Error ( 'primary rollback failed' ) ;
65+ const primary = createMockBlobStorage ( {
66+ deleteObject : vi . fn ( ) . mockRejectedValue ( rollbackError ) ,
67+ } ) ;
68+ const secondary = createMockBlobStorage ( {
69+ putObject : vi . fn ( ) . mockRejectedValue ( secondaryError ) ,
70+ } ) ;
71+ const dual = new DualBlobStorage ( primary , secondary ) ;
72+
73+ await expect ( dual . putObject ( { key : 'k' , body : Buffer . from ( 'd' ) , contentType : 'text/plain' } ) ) . rejects . toMatchObject ( {
74+ message : 'Failed to put object into storage' ,
75+ errors : [ secondaryError , rollbackError ] ,
76+ } ) ;
77+ } ) ;
6278 } ) ;
6379
6480 describe ( 'getObject' , ( ) => {
0 commit comments