|
17 | 17 |
|
18 | 18 | import static org.assertj.core.api.Assertions.assertThat;
|
19 | 19 | import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
| 20 | +import static org.junit.Assert.assertThrows; |
20 | 21 |
|
21 | 22 | import org.assertj.core.data.Offset;
|
22 | 23 | import org.junit.After;
|
|
30 | 31 | import software.amazon.awssdk.enhanced.dynamodb.model.PutItemEnhancedRequest;
|
31 | 32 | import software.amazon.awssdk.enhanced.dynamodb.model.PutItemEnhancedResponse;
|
32 | 33 | import software.amazon.awssdk.enhanced.dynamodb.model.Record;
|
| 34 | +import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest; |
33 | 35 | import software.amazon.awssdk.enhanced.dynamodb.model.UpdateItemEnhancedRequest;
|
34 | 36 | import software.amazon.awssdk.enhanced.dynamodb.model.UpdateItemEnhancedResponse;
|
35 | 37 | import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
|
|
40 | 42 | import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity;
|
41 | 43 | import software.amazon.awssdk.services.dynamodb.model.ReturnItemCollectionMetrics;
|
42 | 44 | import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure;
|
| 45 | +import software.amazon.awssdk.services.dynamodb.model.TransactionCanceledException; |
43 | 46 |
|
44 | 47 | public class CrudWithResponseIntegrationTest extends DynamoDbEnhancedIntegrationTestBase {
|
45 | 48 |
|
@@ -218,6 +221,54 @@ public void deleteItem_returnValuesOnConditionCheckFailure_set_returnValuesOnCon
|
218 | 221 | .satisfies(e -> assertThat(((ConditionalCheckFailedException) e).hasItem()).isFalse());
|
219 | 222 | }
|
220 | 223 |
|
| 224 | + @Test |
| 225 | + public void deleteItemWithTransactWrite_shouldFailIfVersionMismatch() { |
| 226 | + Record originalItem = new Record().setId("123").setSort(10).setStringAttribute("Original Item"); |
| 227 | + Key recordKey = Key.builder() |
| 228 | + .partitionValue(originalItem.getId()) |
| 229 | + .sortValue(originalItem.getSort()) |
| 230 | + .build(); |
| 231 | + |
| 232 | + mappedTable.putItem(originalItem); |
| 233 | + |
| 234 | + // Retrieve the item and modify it separately |
| 235 | + Record modifiedItem = mappedTable.getItem(r -> r.key(recordKey)); |
| 236 | + modifiedItem.setStringAttribute("Updated Item"); |
| 237 | + |
| 238 | + // Update the item, which will increment the version |
| 239 | + mappedTable.updateItem(modifiedItem); |
| 240 | + |
| 241 | + // Now attempt to delete the original item using a transaction |
| 242 | + TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest.builder() |
| 243 | + .addDeleteItem(mappedTable, modifiedItem) |
| 244 | + .build(); |
| 245 | + |
| 246 | + assertThrows(TransactionCanceledException.class, () -> enhancedClient.transactWriteItems(request)); |
| 247 | + } |
| 248 | + |
| 249 | + @Test |
| 250 | + public void deleteItemWithTransactWrite_shouldSucceedIfVersionMatch() { |
| 251 | + Record originalItem = new Record().setId("123").setSort(10).setStringAttribute("Original Item"); |
| 252 | + Key recordKey = Key.builder() |
| 253 | + .partitionValue(originalItem.getId()) |
| 254 | + .sortValue(originalItem.getSort()) |
| 255 | + .build(); |
| 256 | + mappedTable.putItem(originalItem); |
| 257 | + |
| 258 | + // Retrieve the item |
| 259 | + Record retrievedItem = mappedTable.getItem(r -> r.key(recordKey)); |
| 260 | + |
| 261 | + // Delete the item using a transaction |
| 262 | + TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest.builder() |
| 263 | + .addDeleteItem(mappedTable, retrievedItem) |
| 264 | + .build(); |
| 265 | + |
| 266 | + enhancedClient.transactWriteItems(request); |
| 267 | + |
| 268 | + Record deletedItem = mappedTable.getItem(r -> r.key(recordKey)); |
| 269 | + assertThat(deletedItem).isNull(); |
| 270 | + } |
| 271 | + |
221 | 272 | @Test
|
222 | 273 | public void deleteItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNotNull() {
|
223 | 274 | Record record = new Record().setId("1").setSort(10);
|
|
0 commit comments