|
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