@@ -347,7 +347,55 @@ public void getItem_withoutReturnConsumedCapacity() {
347
347
}
348
348
349
349
@ 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 () {
351
399
RecordWithVersion originalItem = new RecordWithVersion ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
352
400
Key recordKey = Key .builder ()
353
401
.partitionValue (originalItem .getId ())
@@ -359,9 +407,10 @@ public void deleteItemWithOptimisticLockingEnabled_shouldSucceedIfVersionMatch()
359
407
RecordWithVersion retrievedItem = recordWithVersionMappedTable .getItem (r -> r .key (recordKey )).join ();
360
408
361
409
// 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 ();
365
414
366
415
enhancedClient .transactWriteItems (request ).join ();
367
416
@@ -370,7 +419,7 @@ public void deleteItemWithOptimisticLockingEnabled_shouldSucceedIfVersionMatch()
370
419
}
371
420
372
421
@ Test
373
- public void deleteItemWithOptimisticLockingEnabled_shouldFailIfVersionMismatch () {
422
+ public void deleteItemWithVersion_andOptimisticLockingEnabled_ifVersionMismatch_shouldFail () {
374
423
RecordWithVersion originalItem = new RecordWithVersion ().setId ("123" ).setSort (10 ).setStringAttribute ("Original Item" );
375
424
Key recordKey = Key .builder ()
376
425
.partitionValue (originalItem .getId ())
@@ -384,12 +433,13 @@ public void deleteItemWithOptimisticLockingEnabled_shouldFailIfVersionMismatch()
384
433
modifiedItem .setStringAttribute ("Updated Item" );
385
434
386
435
// Update the item, which will increment the version
387
- recordWithVersionMappedTable .updateItem (modifiedItem ). join () ;
436
+ recordWithVersionMappedTable .updateItem (modifiedItem );
388
437
389
438
// 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 ();
393
443
394
444
assertThatThrownBy (() -> enhancedClient .transactWriteItems (request ).join ())
395
445
.isInstanceOf (CompletionException .class )
@@ -402,4 +452,57 @@ public void deleteItemWithOptimisticLockingEnabled_shouldFailIfVersionMismatch()
402
452
&& "The conditional request failed" .equals (reason .message ())))
403
453
.isTrue ());
404
454
}
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
+ }
405
508
}
0 commit comments