Skip to content

Commit c07ff14

Browse files
committed
Fix handling of UpdateBehavior.WRITE_IF_NOT_EXISTS on @DynamoDbAutoGeneratedUuid
1 parent d261d42 commit c07ff14

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/AutoGeneratedUuidRecordTest.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ public void updateItemConditionTestFailure() {
311311
}
312312

313313
// ======================================================================
314-
// SCENARIO 1: UpdateItem → UpdateItem
314+
// SCENARIO 1: PutItem → UpdateItem → UpdateItem
315315
// Case A: UUIDs are not provided in request payload
316316
// createdUuid stays the same across updates (UpdateBehaviour.WRITE_IF_NOT_EXISTS)
317317
// lastUpdatedUuid changes on every update (UpdateBehaviour.WRITE_ALWAYS)
@@ -339,7 +339,7 @@ public void updateItemTwice_withoutUuidsOnRequest_thenCreatedUuidPreservedAndLas
339339
}
340340

341341
// ======================================================================
342-
// SCENARIO 1: UpdateItem → UpdateItem
342+
// SCENARIO 1: PutItem → UpdateItem → UpdateItem
343343
// Case B: createdUuid provided in request payload (should be ignored)
344344
// createdUuid stays the same across updates (UpdateBehaviour.WRITE_IF_NOT_EXISTS)
345345
// lastUpdatedUuid changes on every update (UpdateBehaviour.WRITE_ALWAYS)
@@ -385,7 +385,7 @@ public void putUpdatePut_withoutUuidsOnRequest_thenCreatedUuidPreservedOnUpdateA
385385
String lastUpdatedUuidAfterFirstPut = afterFirstPut.getLastUpdatedUuid();
386386
assertRecordHasValidUuid(afterFirstPut);
387387

388-
// UPDATE → created preserved, lastUpdated changes
388+
// UPDATE → createdUuid preserved, lastUpdatedUuid changes
389389
mappedTable.updateItem(new Record().id("id1").attribute("id1"));
390390
Record afterUpdate = mappedTable.getItem(r -> r.key(k -> k.partitionValue("id1")));
391391
Assertions.assertThat(afterUpdate.getCreatedUuid()).isEqualTo(createdUuidAfterFirstPut);
@@ -401,29 +401,29 @@ public void putUpdatePut_withoutUuidsOnRequest_thenCreatedUuidPreservedOnUpdateA
401401

402402
// ======================================================================
403403
// SCENARIO 2: PutItem → UpdateItem → PutItem
404-
// Case B: createdUuid provided on first PUT request → is preserved on UPDATE, regenerated on the next PUT request
405-
// createdUuid stays the same after update, regenerates on PUT (UpdateBehaviour.WRITE_IF_NOT_EXISTS)
406-
// lastUpdatedUuid changes after every request (UpdateBehaviour.WRITE_ALWAYS)
404+
// Case B: createdUuid provided on first PUT request → is preserved on UPDATE, regenerated on the next PUT request
405+
// createdUuid stays the same after update, regenerates after PUT (UpdateBehaviour.WRITE_IF_NOT_EXISTS)
406+
// lastUpdatedUuid changes after every request (UpdateBehaviour.WRITE_ALWAYS)
407407
// ======================================================================
408408
@Test
409409
public void putUpdatePut_withoutUuidsOnRequest_thenCreatedUuidPreservedOnUpdateAndRegeneratedOnPut_AndLastUpdatedUuidChanged() {
410410
String manualCreated = "UUID-" + UUID.randomUUID();
411411

412-
// First PUT with createdUuid provided in request payload → created preserved, lastUpdated generated
412+
// First PUT with createdUuid provided in request payload → createdUuid preserved, lastUpdatedUuid generated
413413
Record first = new Record().id("p1").attribute("p1");
414414
first.setCreatedUuid(manualCreated);
415415
mappedTable.putItem(first);
416416
Record afterFirstPut = mappedTable.getItem(r -> r.key(k -> k.partitionValue("p1")));
417417
Assertions.assertThat(afterFirstPut.getCreatedUuid()).isEqualTo(manualCreated);
418418
String lastUpdatedUuidAfterFirstPut = afterFirstPut.getLastUpdatedUuid();
419419

420-
// UPDATE → created preserved, lastUpdated changes
420+
// UPDATE → createdUuid preserved, lastUpdatedUuid changes
421421
mappedTable.updateItem(new Record().id("p1").attribute("id1"));
422422
Record afterUpdate = mappedTable.getItem(r -> r.key(k -> k.partitionValue("p1")));
423423
Assertions.assertThat(afterUpdate.getCreatedUuid()).isEqualTo(manualCreated);
424424
Assertions.assertThat(afterUpdate.getLastUpdatedUuid()).isNotEqualTo(lastUpdatedUuidAfterFirstPut);
425425

426-
// Second PUT without manual createdUuid → both regenerated
426+
// Second PUT without manual createdUuid → both uuids regenerated
427427
mappedTable.putItem(new Record().id("p1").attribute("p1"));
428428
Record afterSecondPut = mappedTable.getItem(r -> r.key(k -> k.partitionValue("p1")));
429429
Assertions.assertThat(afterSecondPut.getCreatedUuid()).isNotEqualTo(manualCreated);
@@ -434,8 +434,8 @@ public void putUpdatePut_withoutUuidsOnRequest_thenCreatedUuidPreservedOnUpdateA
434434
// ======================================================================
435435
// SCENARIO 3: transactWriteItems.addPutItem → addPutItem
436436
// Case A: UUIDs not provided in request payload (both regenerated on each PUT)
437-
// createdUuid changes after every update (UpdateBehaviour.WRITE_IF_NOT_EXISTS)
438-
// lastUpdatedUuid changes after every update (UpdateBehaviour.WRITE_ALWAYS)
437+
// createdUuid changes after every update (UpdateBehaviour.WRITE_IF_NOT_EXISTS)
438+
// lastUpdatedUuid changes after every update (UpdateBehaviour.WRITE_ALWAYS)
439439
// ======================================================================
440440
@Test
441441
public void transactPutThenPut_withoutUuidsOnRequest_thenBothUuidsRegeneratedEachTime() {
@@ -470,7 +470,7 @@ public void transactPutThenPut_withoutUuidsOnRequest_thenBothUuidsRegeneratedEac
470470
// lastUpdatedUuid changes after every put (UpdateBehaviour.WRITE_ALWAYS)
471471
// ======================================================================
472472
@Test
473-
public void transactPutWithManualCreatedUuid_thenPutWithoutUuid_thenBothUuidsRegeneratedEachTime() {
473+
public void transactPutWithManualCreatedUuid_thenPutWithoutUuid_thenBothUuidsRegeneratedOnSecondPut() {
474474
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
475475
.dynamoDbClient(getDynamoDbClient())
476476
.extensions(AutoGeneratedUuidExtension.create())
@@ -489,9 +489,7 @@ public void transactPutWithManualCreatedUuid_thenPutWithoutUuid_thenBothUuidsReg
489489
String lastUpdatedUuidAfterFirstUpdateRecord = afterFirstUpdateRecord.getLastUpdatedUuid();
490490

491491
// Transaction PUT #2 without uuids provided in request payload → both regenerated
492-
client.transactWriteItems(TransactWriteItemsEnhancedRequest.builder()
493-
.addPutItem(table, new Record().id("id2").attribute("p2"))
494-
.build());
492+
table.putItem(new Record().id("id2").attribute("p2"));
495493
Record afterSecondUpdateRecord = table.getItem(r -> r.key(k -> k.partitionValue("id2")));
496494
Assertions.assertThat(afterSecondUpdateRecord.getCreatedUuid()).isNotEqualTo(manualCreated);
497495
Assertions.assertThat(afterSecondUpdateRecord.getLastUpdatedUuid()).isNotEqualTo(lastUpdatedUuidAfterFirstUpdateRecord);

0 commit comments

Comments
 (0)