Skip to content

Commit 4de6ae4

Browse files
committed
adding annotation test
1 parent b7b79c2 commit 4de6ae4

File tree

3 files changed

+116
-27
lines changed

3 files changed

+116
-27
lines changed

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/extensions/VersionedRecordExtensionTest.java

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,15 @@
3030
import org.junit.jupiter.params.ParameterizedTest;
3131
import org.junit.jupiter.params.provider.Arguments;
3232
import org.junit.jupiter.params.provider.MethodSource;
33-
import software.amazon.awssdk.enhanced.dynamodb.AttributeConverterProvider;
34-
import software.amazon.awssdk.enhanced.dynamodb.AttributeValueType;
3533
import software.amazon.awssdk.enhanced.dynamodb.Expression;
3634
import software.amazon.awssdk.enhanced.dynamodb.OperationContext;
3735
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
3836
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;
4137
import software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbVersionAttribute;
4238
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem;
4339
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;
4542
import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext;
4643
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DefaultOperationContext;
4744
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
@@ -529,31 +526,62 @@ public void customIncrementForExistingVersion_withImmutableSchema_worksAsExpecte
529526
}
530527
VersionedRecordExtension recordExtension = recordExtensionBuilder.build();
531528

532-
ImmutableFakeVersionedItem fakeItem = ImmutableFakeVersionedItem
529+
FakeVersionedStaticImmutableItem fakeItem = FakeVersionedStaticImmutableItem
533530
.builder()
534531
.id(UUID.randomUUID().toString())
535532
.version(existingVersion)
536533
.build();
537534

538535
Map<String, AttributeValue> inputMap =
539-
new HashMap<>(ImmutableFakeVersionedItem.getTableSchema().itemToMap(fakeItem, true));
536+
new HashMap<>(FakeVersionedStaticImmutableItem.getTableSchema().itemToMap(fakeItem, true));
540537

541538
Map<String, AttributeValue> expectedVersionedItem =
542-
new HashMap<>(ImmutableFakeVersionedItem.getTableSchema().itemToMap(fakeItem, true));
539+
new HashMap<>(FakeVersionedStaticImmutableItem.getTableSchema().itemToMap(fakeItem, true));
543540
expectedVersionedItem.put("version", AttributeValue.builder().n(expectedNextVersion).build());
544541

545542
WriteModification result =
546543
recordExtension.beforeWrite(DefaultDynamoDbExtensionContext
547544
.builder()
548545
.items(inputMap)
549-
.tableMetadata(ImmutableFakeVersionedItem.getTableMetadata())
546+
.tableMetadata(FakeVersionedStaticImmutableItem.getTableMetadata())
550547
.operationContext(PRIMARY_CONTEXT).build());
551548

552549
assertThat(result.transformedItem(), is(expectedVersionedItem));
553550
assertThat(result.additionalConditionalExpression().expression(),
554551
is("#AMZN_MAPPED_version = :old_version_value"));
555552
}
556553

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+
557585
public static Stream<Arguments> customIncrementForExistingVersionValues() {
558586
return Stream.of(
559587
Arguments.of(0L, 1L, 5L, "6"),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.enhanced.dynamodb.functionaltests.models;
17+
18+
import software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbVersionAttribute;
19+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbImmutable;
20+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
21+
22+
@DynamoDbImmutable(builder = FakeVersionedImmutableItem.Builder.class)
23+
public class FakeVersionedImmutableItem {
24+
private final String id;
25+
private final Long version;
26+
27+
private FakeVersionedImmutableItem(Builder builder) {
28+
this.id = builder.id;
29+
this.version = builder.version;
30+
}
31+
32+
@DynamoDbPartitionKey
33+
public String getId() {
34+
return id;
35+
}
36+
37+
@DynamoDbVersionAttribute(startAt = 4, incrementBy = 5)
38+
public Long getVersion() {
39+
return version;
40+
}
41+
42+
public static Builder builder() {
43+
return new Builder();
44+
}
45+
46+
public static class Builder {
47+
private String id;
48+
private Long version;
49+
50+
public Builder id(String id) {
51+
this.id = id;
52+
return this;
53+
}
54+
55+
public Builder version(Long version) {
56+
this.version = version;
57+
return this;
58+
}
59+
60+
public FakeVersionedImmutableItem build() {
61+
return new FakeVersionedImmutableItem(this);
62+
}
63+
}
64+
}
Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbImmutable;
2626
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
2727

28-
@DynamoDbImmutable(builder = ImmutableFakeVersionedItem.Builder.class)
29-
public class ImmutableFakeVersionedItem {
28+
@DynamoDbImmutable(builder = FakeVersionedStaticImmutableItem.Builder.class)
29+
public class FakeVersionedStaticImmutableItem {
3030
private final String id;
3131
private final String attribute;
3232
private final long version;
3333

34-
private ImmutableFakeVersionedItem(Builder b) {
34+
private FakeVersionedStaticImmutableItem(Builder b) {
3535
this.id = b.id;
3636
this.attribute = b.attribute;
3737
this.version = b.version;
@@ -62,7 +62,7 @@ public boolean equals(Object o) {
6262
if (o == null || getClass() != o.getClass()) {
6363
return false;
6464
}
65-
ImmutableFakeVersionedItem that = (ImmutableFakeVersionedItem) o;
65+
FakeVersionedStaticImmutableItem that = (FakeVersionedStaticImmutableItem) o;
6666
return version == that.version && Objects.equals(id, that.id) && Objects.equals(attribute, that.attribute);
6767
}
6868

@@ -71,26 +71,23 @@ public int hashCode() {
7171
return Objects.hash(id, attribute, version);
7272
}
7373

74-
public static TableSchema<ImmutableFakeVersionedItem> getTableSchema() {
75-
return StaticImmutableTableSchema.builder(ImmutableFakeVersionedItem.class, ImmutableFakeVersionedItem.Builder.class)
76-
.newItemBuilder(ImmutableFakeVersionedItem::builder, ImmutableFakeVersionedItem.Builder::build)
74+
public static TableSchema<FakeVersionedStaticImmutableItem> getTableSchema() {
75+
return StaticImmutableTableSchema.builder(FakeVersionedStaticImmutableItem.class, FakeVersionedStaticImmutableItem.Builder.class)
76+
.newItemBuilder(FakeVersionedStaticImmutableItem::builder, FakeVersionedStaticImmutableItem.Builder::build)
7777
.addAttribute(String.class, a -> a.name("id")
78-
.getter(ImmutableFakeVersionedItem::id)
79-
.setter(ImmutableFakeVersionedItem.Builder::id)
78+
.getter(FakeVersionedStaticImmutableItem::id)
79+
.setter(FakeVersionedStaticImmutableItem.Builder::id)
8080
.tags(primaryPartitionKey()))
8181
.addAttribute(Long.class, a -> a.name("version")
82-
.getter(ImmutableFakeVersionedItem::version)
83-
.setter(ImmutableFakeVersionedItem.Builder::version)
82+
.getter(FakeVersionedStaticImmutableItem::version)
83+
.setter(FakeVersionedStaticImmutableItem.Builder::version)
8484
.tags(versionAttribute()))
8585
.addAttribute(String.class, a -> a.name("attribute")
86-
.getter(ImmutableFakeVersionedItem::attribute)
87-
.setter(ImmutableFakeVersionedItem.Builder::attribute))
86+
.getter(FakeVersionedStaticImmutableItem::attribute)
87+
.setter(FakeVersionedStaticImmutableItem.Builder::attribute))
8888
.build();
8989
}
9090

91-
92-
93-
9491
public static TableMetadata getTableMetadata() {
9592
return getTableSchema().tableMetadata();
9693
}
@@ -115,8 +112,8 @@ public Builder attribute(String attribute) {
115112
return this;
116113
}
117114

118-
public ImmutableFakeVersionedItem build() {
119-
return new ImmutableFakeVersionedItem(this);
115+
public FakeVersionedStaticImmutableItem build() {
116+
return new FakeVersionedStaticImmutableItem(this);
120117
}
121118
}
122119
}

0 commit comments

Comments
 (0)