@@ -347,7 +347,55 @@ public void getItem_withoutReturnConsumedCapacity() {
347347 }
348348
349349 @ Test
350- public void deleteItemWithOptimisticLockingEnabled_shouldSucceedIfVersionMatch () {
350+ public void deleteItemWithoutVersion_andOptimisticLockingEnabled_shouldSucceed () {
351+ Record originalItem = new Record ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
352+ Key recordKey = Key .builder ()
353+ .partitionValue (originalItem .getId ())
354+ .sortValue (originalItem .getSort ())
355+ .build ();
356+ mappedTable .putItem (originalItem ).join ();
357+
358+ // Retrieve the item
359+ Record retrievedItem = mappedTable .getItem (r -> r .key (recordKey )).join ();
360+
361+ // Delete the item using a transaction
362+ TransactWriteItemsEnhancedRequest request =
363+ TransactWriteItemsEnhancedRequest .builder ()
364+ .addDeleteItem (mappedTable , retrievedItem , true )
365+ .build ();
366+
367+ enhancedClient .transactWriteItems (request ).join ();
368+
369+ Record deletedItem = mappedTable .getItem (r -> r .key (recordKey )).join ();
370+ assertThat (deletedItem ).isNull ();
371+ }
372+
373+ @ Test
374+ public void deleteItemWithoutVersion_andOptimisticLockingDisabled_shouldSucceed () {
375+ Record originalItem = new Record ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
376+ Key recordKey = Key .builder ()
377+ .partitionValue (originalItem .getId ())
378+ .sortValue (originalItem .getSort ())
379+ .build ();
380+ mappedTable .putItem (originalItem ).join ();
381+
382+ // Retrieve the item
383+ Record retrievedItem = mappedTable .getItem (r -> r .key (recordKey )).join ();
384+
385+ // Delete the item using a transaction
386+ TransactWriteItemsEnhancedRequest request =
387+ TransactWriteItemsEnhancedRequest .builder ()
388+ .addDeleteItem (mappedTable , retrievedItem , false )
389+ .build ();
390+
391+ enhancedClient .transactWriteItems (request ).join ();
392+
393+ Record deletedItem = mappedTable .getItem (r -> r .key (recordKey )).join ();
394+ assertThat (deletedItem ).isNull ();
395+ }
396+
397+ @ Test
398+ public void deleteItemWithVersion_andOptimisticLockingEnabled_ifVersionMatch_shouldSucceed () {
351399 RecordWithVersion originalItem = new RecordWithVersion ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
352400 Key recordKey = Key .builder ()
353401 .partitionValue (originalItem .getId ())
@@ -359,9 +407,10 @@ public void deleteItemWithOptimisticLockingEnabled_shouldSucceedIfVersionMatch()
359407 RecordWithVersion retrievedItem = recordWithVersionMappedTable .getItem (r -> r .key (recordKey )).join ();
360408
361409 // Delete the item using a transaction
362- TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest .builder ()
363- .addDeleteItem (recordWithVersionMappedTable , retrievedItem )
364- .build ();
410+ TransactWriteItemsEnhancedRequest request =
411+ TransactWriteItemsEnhancedRequest .builder ()
412+ .addDeleteItem (recordWithVersionMappedTable , retrievedItem , true )
413+ .build ();
365414
366415 enhancedClient .transactWriteItems (request ).join ();
367416
@@ -370,7 +419,7 @@ public void deleteItemWithOptimisticLockingEnabled_shouldSucceedIfVersionMatch()
370419 }
371420
372421 @ Test
373- public void deleteItemWithOptimisticLockingEnabled_shouldFailIfVersionMismatch () {
422+ public void deleteItemWithVersion_andOptimisticLockingEnabled_ifVersionMismatch_shouldFail () {
374423 RecordWithVersion originalItem = new RecordWithVersion ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
375424 Key recordKey = Key .builder ()
376425 .partitionValue (originalItem .getId ())
@@ -384,12 +433,13 @@ public void deleteItemWithOptimisticLockingEnabled_shouldFailIfVersionMismatch()
384433 modifiedItem .setStringAttribute ("Updated Item" );
385434
386435 // Update the item, which will increment the version
387- recordWithVersionMappedTable .updateItem (modifiedItem ). join () ;
436+ recordWithVersionMappedTable .updateItem (modifiedItem );
388437
389438 // Now attempt to delete the original item using a transaction
390- TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest .builder ()
391- .addDeleteItem (recordWithVersionMappedTable , modifiedItem )
392- .build ();
439+ TransactWriteItemsEnhancedRequest request =
440+ TransactWriteItemsEnhancedRequest .builder ()
441+ .addDeleteItem (recordWithVersionMappedTable , modifiedItem , true )
442+ .build ();
393443
394444 assertThatThrownBy (() -> enhancedClient .transactWriteItems (request ).join ())
395445 .isInstanceOf (CompletionException .class )
@@ -402,4 +452,57 @@ public void deleteItemWithOptimisticLockingEnabled_shouldFailIfVersionMismatch()
402452 && "The conditional request failed" .equals (reason .message ())))
403453 .isTrue ());
404454 }
455+
456+ @ Test
457+ public void deleteItemWithVersion_andOptimisticLockingDisabled_ifVersionMatch_shouldSucceed () {
458+ RecordWithVersion originalItem = new RecordWithVersion ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
459+ Key recordKey = Key .builder ()
460+ .partitionValue (originalItem .getId ())
461+ .sortValue (originalItem .getSort ())
462+ .build ();
463+ recordWithVersionMappedTable .putItem (originalItem ).join ();
464+
465+ // Retrieve the item
466+ RecordWithVersion retrievedItem = recordWithVersionMappedTable .getItem (r -> r .key (recordKey )).join ();
467+
468+ // Delete the item using a transaction
469+ TransactWriteItemsEnhancedRequest request =
470+ TransactWriteItemsEnhancedRequest .builder ()
471+ .addDeleteItem (recordWithVersionMappedTable , retrievedItem , false )
472+ .build ();
473+
474+ enhancedClient .transactWriteItems (request ).join ();
475+
476+ RecordWithVersion deletedItem = recordWithVersionMappedTable .getItem (r -> r .key (recordKey )).join ();
477+ assertThat (deletedItem ).isNull ();
478+ }
479+
480+ @ Test
481+ public void deleteItemWithVersion_andOptimisticLockingDisabled_ifVersionMismatch_shouldSucceed () {
482+ RecordWithVersion originalItem = new RecordWithVersion ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
483+ Key recordKey = Key .builder ()
484+ .partitionValue (originalItem .getId ())
485+ .sortValue (originalItem .getSort ())
486+ .build ();
487+
488+ recordWithVersionMappedTable .putItem (originalItem ).join ();
489+
490+ // Retrieve the item and modify it separately
491+ RecordWithVersion modifiedItem = recordWithVersionMappedTable .getItem (r -> r .key (recordKey )).join ();
492+ modifiedItem .setStringAttribute ("Updated Item" );
493+
494+ // Update the item, which will increment the version
495+ recordWithVersionMappedTable .updateItem (modifiedItem );
496+
497+ // Now attempt to delete the original item using a transaction
498+ TransactWriteItemsEnhancedRequest request =
499+ TransactWriteItemsEnhancedRequest .builder ()
500+ .addDeleteItem (recordWithVersionMappedTable , modifiedItem , false )
501+ .build ();
502+
503+ enhancedClient .transactWriteItems (request ).join ();
504+
505+ RecordWithVersion deletedItem = recordWithVersionMappedTable .getItem (r -> r .key (recordKey )).join ();
506+ assertThat (deletedItem ).isNull ();
507+ }
405508}
0 commit comments