|
30 | 30 | import org.junit.jupiter.params.ParameterizedTest; |
31 | 31 | import org.junit.jupiter.params.provider.Arguments; |
32 | 32 | import org.junit.jupiter.params.provider.MethodSource; |
33 | | -import software.amazon.awssdk.enhanced.dynamodb.AttributeConverterProvider; |
34 | | -import software.amazon.awssdk.enhanced.dynamodb.AttributeValueType; |
35 | 33 | import software.amazon.awssdk.enhanced.dynamodb.Expression; |
36 | 34 | import software.amazon.awssdk.enhanced.dynamodb.OperationContext; |
37 | 35 | import software.amazon.awssdk.enhanced.dynamodb.TableMetadata; |
38 | 36 | import software.amazon.awssdk.enhanced.dynamodb.TableSchema; |
39 | | -import software.amazon.awssdk.enhanced.dynamodb.document.DocumentTableSchema; |
40 | | -import software.amazon.awssdk.enhanced.dynamodb.document.EnhancedDocument; |
41 | 37 | import software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbVersionAttribute; |
42 | 38 | import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; |
43 | 39 | import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItemWithSort; |
44 | | -import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.ImmutableFakeVersionedItem; |
| 40 | +import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeVersionedImmutableItem; |
| 41 | +import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeVersionedStaticImmutableItem; |
45 | 42 | import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext; |
46 | 43 | import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DefaultOperationContext; |
47 | 44 | import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean; |
@@ -529,31 +526,62 @@ public void customIncrementForExistingVersion_withImmutableSchema_worksAsExpecte |
529 | 526 | } |
530 | 527 | VersionedRecordExtension recordExtension = recordExtensionBuilder.build(); |
531 | 528 |
|
532 | | - ImmutableFakeVersionedItem fakeItem = ImmutableFakeVersionedItem |
| 529 | + FakeVersionedStaticImmutableItem fakeItem = FakeVersionedStaticImmutableItem |
533 | 530 | .builder() |
534 | 531 | .id(UUID.randomUUID().toString()) |
535 | 532 | .version(existingVersion) |
536 | 533 | .build(); |
537 | 534 |
|
538 | 535 | Map<String, AttributeValue> inputMap = |
539 | | - new HashMap<>(ImmutableFakeVersionedItem.getTableSchema().itemToMap(fakeItem, true)); |
| 536 | + new HashMap<>(FakeVersionedStaticImmutableItem.getTableSchema().itemToMap(fakeItem, true)); |
540 | 537 |
|
541 | 538 | Map<String, AttributeValue> expectedVersionedItem = |
542 | | - new HashMap<>(ImmutableFakeVersionedItem.getTableSchema().itemToMap(fakeItem, true)); |
| 539 | + new HashMap<>(FakeVersionedStaticImmutableItem.getTableSchema().itemToMap(fakeItem, true)); |
543 | 540 | expectedVersionedItem.put("version", AttributeValue.builder().n(expectedNextVersion).build()); |
544 | 541 |
|
545 | 542 | WriteModification result = |
546 | 543 | recordExtension.beforeWrite(DefaultDynamoDbExtensionContext |
547 | 544 | .builder() |
548 | 545 | .items(inputMap) |
549 | | - .tableMetadata(ImmutableFakeVersionedItem.getTableMetadata()) |
| 546 | + .tableMetadata(FakeVersionedStaticImmutableItem.getTableMetadata()) |
550 | 547 | .operationContext(PRIMARY_CONTEXT).build()); |
551 | 548 |
|
552 | 549 | assertThat(result.transformedItem(), is(expectedVersionedItem)); |
553 | 550 | assertThat(result.additionalConditionalExpression().expression(), |
554 | 551 | is("#AMZN_MAPPED_version = :old_version_value")); |
555 | 552 | } |
556 | 553 |
|
| 554 | + @Test |
| 555 | + public void customStartingValueAndIncrementWithImmutableClass_worksAsExpected() { |
| 556 | + VersionedRecordExtension recordExtension = VersionedRecordExtension.builder().build(); |
| 557 | + |
| 558 | + FakeVersionedImmutableItem item = FakeVersionedImmutableItem.builder() |
| 559 | + .id(UUID.randomUUID().toString()) |
| 560 | + .build(); |
| 561 | + |
| 562 | + TableSchema<FakeVersionedImmutableItem> schema = |
| 563 | + TableSchema.fromImmutableClass(FakeVersionedImmutableItem.class); |
| 564 | + |
| 565 | + Map<String, AttributeValue> inputMap = new HashMap<>(schema.itemToMap(item, true)); |
| 566 | + |
| 567 | + Map<String, AttributeValue> expectedInitialVersion = new HashMap<>(schema.itemToMap(item, true)); |
| 568 | + expectedInitialVersion.put("version", AttributeValue.builder().n("9").build()); |
| 569 | + |
| 570 | + WriteModification result = |
| 571 | + recordExtension.beforeWrite(DefaultDynamoDbExtensionContext |
| 572 | + .builder() |
| 573 | + .items(inputMap) |
| 574 | + .tableMetadata(schema.tableMetadata()) |
| 575 | + .operationContext(PRIMARY_CONTEXT).build()); |
| 576 | + |
| 577 | + assertThat(result.transformedItem(), is(expectedInitialVersion)); |
| 578 | + assertThat(result.additionalConditionalExpression(), |
| 579 | + is(Expression.builder() |
| 580 | + .expression("attribute_not_exists(#AMZN_MAPPED_version)") |
| 581 | + .expressionNames(singletonMap("#AMZN_MAPPED_version", "version")) |
| 582 | + .build())); |
| 583 | + } |
| 584 | + |
557 | 585 | public static Stream<Arguments> customIncrementForExistingVersionValues() { |
558 | 586 | return Stream.of( |
559 | 587 | Arguments.of(0L, 1L, 5L, "6"), |
|
0 commit comments