Skip to content

Commit 386e270

Browse files
Tests refactorization (parameterization).
1 parent 84bdb63 commit 386e270

5 files changed

Lines changed: 387 additions & 444 deletions

File tree

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

Lines changed: 63 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.HashMap;
2828
import java.util.Map;
2929
import java.util.UUID;
30+
import java.util.function.BiConsumer;
3031
import java.util.stream.Stream;
3132
import org.junit.Test;
3233
import org.junit.jupiter.params.ParameterizedTest;
@@ -43,6 +44,7 @@
4344
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeVersionedStaticImmutableItem;
4445
import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext;
4546
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DefaultOperationContext;
47+
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticAttributeTag;
4648
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema;
4749
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
4850
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
@@ -276,18 +278,28 @@ public static Stream<Arguments> customFailingStartAtAndIncrementValues() {
276278
Arguments.of(-1L, 0L));
277279
}
278280

279-
@Test
280-
public void builder_startAtValueIsLessThanMinusOne_throwsIllegalArgumentException() {
281-
assertThrows(IllegalArgumentException.class,
282-
() -> VersionedRecordExtension.builder().startAt(-2L).build(),
283-
"startAt must be -1 or greater");
281+
@ParameterizedTest(name = "{0}")
282+
@MethodSource("invalidBuilderSetterArguments")
283+
public void builder_invalidSetter_throwsIllegalArgumentException(
284+
String caseDescription,
285+
BiConsumer<VersionedRecordExtension.Builder, Long> setter,
286+
long invalidValue) {
287+
288+
assertThrows(IllegalArgumentException.class, () -> {
289+
VersionedRecordExtension.Builder builder = VersionedRecordExtension.builder();
290+
setter.accept(builder, invalidValue);
291+
builder.build();
292+
});
284293
}
285294

286-
@Test
287-
public void builder_incrementByValueIsLessThanOne_throwsIllegalArgumentException() {
288-
assertThrows(IllegalArgumentException.class,
289-
() -> VersionedRecordExtension.builder().incrementBy(0L).build(),
290-
"incrementBy must be greater than 0.");
295+
private static Stream<Arguments> invalidBuilderSetterArguments() {
296+
BiConsumer<VersionedRecordExtension.Builder, Long> startAt = VersionedRecordExtension.Builder::startAt;
297+
BiConsumer<VersionedRecordExtension.Builder, Long> incrementBy = VersionedRecordExtension.Builder::incrementBy;
298+
return Stream.of(
299+
Arguments.of("startAt(-2)", startAt, -2L),
300+
Arguments.of("startAt(MIN_VALUE)", startAt, Long.MIN_VALUE),
301+
Arguments.of("incrementBy(0)", incrementBy, 0L),
302+
Arguments.of("incrementBy(-1)", incrementBy, -1L));
291303
}
292304

293305
@Test
@@ -686,70 +698,61 @@ public static Stream<Arguments> customIncrementForExistingVersionValues() {
686698
Arguments.of(null, 3L, 4L, "7"));
687699
}
688700

689-
@Test
690-
public void versionAttribute_withInvalidStartAt_throwsIllegalArgumentException() {
701+
@ParameterizedTest(name = "{0}")
702+
@MethodSource("invalidVersionAttributeTagArguments")
703+
public void versionAttribute_withInvalidStartAtOrIncrementBy_throwsIllegalArgumentException(
704+
String caseDescription,
705+
long startAt,
706+
long incrementBy,
707+
String expectedMessage) {
708+
691709
assertThatExceptionOfType(IllegalArgumentException.class)
692-
.isThrownBy(() ->
693-
StaticTableSchema.builder(TestItem.class)
694-
.newItemSupplier(TestItem::new)
695-
.addAttribute(String.class,
696-
a -> a.name("id")
697-
.getter(TestItem::getId)
698-
.setter(TestItem::setId)
699-
.addTag(primaryPartitionKey()))
700-
.addAttribute(Long.class,
701-
a -> a.name("version")
702-
.getter(TestItem::getVersion)
703-
.setter(TestItem::setVersion)
704-
.addTag(versionAttribute(-2L, 1L)))
705-
.build()
706-
)
707-
.withMessage("startAt must be -1 or greater.");
710+
.isThrownBy(() -> buildTestItemStaticSchemaWithLongVersion(versionAttribute(startAt, incrementBy)))
711+
.withMessage(expectedMessage);
708712
}
709713

710-
@Test
711-
public void versionAttribute_withInvalidIncrementBy_throwsIllegalArgumentException() {
712-
assertThatExceptionOfType(IllegalArgumentException.class)
713-
.isThrownBy(() ->
714-
StaticTableSchema.builder(TestItem.class)
715-
.newItemSupplier(TestItem::new)
716-
.addAttribute(String.class,
717-
a -> a.name("id")
718-
.getter(TestItem::getId)
719-
.setter(TestItem::setId)
720-
.addTag(primaryPartitionKey()))
721-
.addAttribute(Long.class,
722-
a -> a.name("version")
723-
.getter(TestItem::getVersion)
724-
.setter(TestItem::setVersion)
725-
.addTag(versionAttribute(0L, 0L)))
726-
.build()
727-
)
728-
.withMessage("incrementBy must be greater than 0.");
714+
private static Stream<Arguments> invalidVersionAttributeTagArguments() {
715+
return Stream.of(
716+
Arguments.of("invalid startAt", -2L, 1L, "startAt must be -1 or greater."),
717+
Arguments.of("invalid incrementBy", 0L, 0L, "incrementBy must be greater than 0."));
729718
}
730719

731720
@Test
732721
public void versionAttribute_withNonNumericType_throwsIllegalArgumentException() {
733722
assertThatExceptionOfType(IllegalArgumentException.class)
734723
.isThrownBy(() ->
735-
StaticTableSchema.builder(TestItem.class)
736-
.newItemSupplier(TestItem::new)
737-
.addAttribute(String.class,
738-
a -> a.name("id")
739-
.getter(TestItem::getId)
740-
.setter(TestItem::setId)
741-
.addTag(primaryPartitionKey()))
742-
.addAttribute(String.class,
743-
a -> a.name("version")
744-
.getter(TestItem::getId)
745-
.setter(TestItem::setId)
746-
.addTag(versionAttribute()))
747-
.build()
724+
testItemStaticSchemaBuilderThroughPk()
725+
.addAttribute(String.class,
726+
a -> a.name("version")
727+
.getter(TestItem::getId)
728+
.setter(TestItem::setId)
729+
.addTag(versionAttribute()))
730+
.build()
748731
)
749732
.withMessageContaining(
750733
"is not a suitable type to be used as a version attribute. Only type 'N' is supported.");
751734
}
752735

736+
private static StaticTableSchema.Builder<TestItem> testItemStaticSchemaBuilderThroughPk() {
737+
return StaticTableSchema.builder(TestItem.class)
738+
.newItemSupplier(TestItem::new)
739+
.addAttribute(String.class,
740+
a -> a.name("id")
741+
.getter(TestItem::getId)
742+
.setter(TestItem::setId)
743+
.addTag(primaryPartitionKey()));
744+
}
745+
746+
private static void buildTestItemStaticSchemaWithLongVersion(StaticAttributeTag versionTag) {
747+
testItemStaticSchemaBuilderThroughPk()
748+
.addAttribute(Long.class,
749+
a -> a.name("version")
750+
.getter(TestItem::getVersion)
751+
.setter(TestItem::setVersion)
752+
.addTag(versionTag))
753+
.build();
754+
}
755+
753756
private static class TestItem {
754757
private String id;
755758
private Long version;

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

Lines changed: 9 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2020
import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue;
2121

22-
import java.util.Arrays;
2322
import java.util.Collection;
24-
import java.util.Objects;
2523
import java.util.function.Function;
2624

2725
import org.assertj.core.api.Assertions;
@@ -35,10 +33,6 @@
3533
import software.amazon.awssdk.enhanced.dynamodb.Expression;
3634
import software.amazon.awssdk.enhanced.dynamodb.Key;
3735
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
38-
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.AbstractBean;
39-
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.AbstractImmutable;
40-
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.SimpleBean;
41-
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.SimpleImmutable;
4236
import software.amazon.awssdk.enhanced.dynamodb.model.DeleteItemEnhancedRequest;
4337
import software.amazon.awssdk.enhanced.dynamodb.model.DeleteItemEnhancedResponse;
4438
import software.amazon.awssdk.enhanced.dynamodb.model.DescribeTableEnhancedResponse;
@@ -60,32 +54,7 @@ public class AnnotatedTableSchemaTest extends LocalDynamoDbSyncTestBase {
6054

6155
@Parameterized.Parameters(name = "{0}")
6256
public static Collection<Object[]> parameters() {
63-
return Arrays.asList(new Object[][] {
64-
{
65-
"@DynamoDbBean",
66-
SimpleBean.class,
67-
TableSchema.fromClass(SimpleBean.class),
68-
(Function<TestItemFactory, Object>) TestItemFactory::bean,
69-
(Function<TestItemFactory, Object>) TestItemFactory::beanPartial,
70-
(Function<TestItemFactory, Object>) TestItemFactory::beanItem1,
71-
(Function<TestItemFactory, Object>) TestItemFactory::beanItem2,
72-
(Function<TestItemFactory, Object>) TestItemFactory::beanUpdated,
73-
(Function<TestItemFactory, Object>) TestItemFactory::beanUpdatedNullString,
74-
AbstractBean.class
75-
},
76-
{
77-
"@DynamoDbImmutable",
78-
SimpleImmutable.class,
79-
TableSchema.fromClass(SimpleImmutable.class),
80-
(Function<TestItemFactory, Object>) TestItemFactory::immutable,
81-
(Function<TestItemFactory, Object>) TestItemFactory::immutablePartial,
82-
(Function<TestItemFactory, Object>) TestItemFactory::immutableItem1,
83-
(Function<TestItemFactory, Object>) TestItemFactory::immutableItem2,
84-
(Function<TestItemFactory, Object>) TestItemFactory::immutableUpdated,
85-
(Function<TestItemFactory, Object>) TestItemFactory::immutableUpdatedNullString,
86-
AbstractImmutable.class
87-
}
88-
});
57+
return AnnotatedTableSchemaTestSupport.parameters();
8958
}
9059

9160
@Parameterized.Parameter(0)
@@ -98,22 +67,22 @@ public static Collection<Object[]> parameters() {
9867
public TableSchema<Object> tableSchema;
9968

10069
@Parameterized.Parameter(3)
101-
public Function<TestItemFactory, Object> fullItem;
70+
public Function<AnnotatedTableSchemaTestSupport.TestItemFactory, Object> fullItem;
10271

10372
@Parameterized.Parameter(4)
104-
public Function<TestItemFactory, Object> partialItem;
73+
public Function<AnnotatedTableSchemaTestSupport.TestItemFactory, Object> partialItem;
10574

10675
@Parameterized.Parameter(5)
107-
public Function<TestItemFactory, Object> firstItem;
76+
public Function<AnnotatedTableSchemaTestSupport.TestItemFactory, Object> firstItem;
10877

10978
@Parameterized.Parameter(6)
110-
public Function<TestItemFactory, Object> secondItem;
79+
public Function<AnnotatedTableSchemaTestSupport.TestItemFactory, Object> secondItem;
11180

11281
@Parameterized.Parameter(7)
113-
public Function<TestItemFactory, Object> updatedItem;
82+
public Function<AnnotatedTableSchemaTestSupport.TestItemFactory, Object> updatedItem;
11483

11584
@Parameterized.Parameter(8)
116-
public Function<TestItemFactory, Object> updatedItemWithNullString;
85+
public Function<AnnotatedTableSchemaTestSupport.TestItemFactory, Object> updatedItemWithNullString;
11786

11887
@Parameterized.Parameter(9)
11988
public Class<?> abstractItemClass;
@@ -123,13 +92,13 @@ public static Collection<Object[]> parameters() {
12392
.build();
12493

12594
private DynamoDbTable<Object> mappedTable;
126-
private TestItemFactory factory;
95+
private AnnotatedTableSchemaTestSupport.TestItemFactory factory;
12796

12897
@Before
12998
public void createTable() {
13099
mappedTable = enhancedClient.table(getConcreteTableName(TABLE_NAME), tableSchema);
131100
mappedTable.createTable(r -> r.provisionedThroughput(getDefaultProvisionedThroughput()));
132-
factory = new TestItemFactory();
101+
factory = new AnnotatedTableSchemaTestSupport.TestItemFactory();
133102
}
134103

135104
@After
@@ -600,114 +569,5 @@ public void deleteItemWithResponse_itemNotFound_returnsNullValue() {
600569

601570
assertThat(deleteItemEnhancedResponse.attributes()).isNull();
602571
}
603-
604-
private static final class TestItemFactory {
605-
private final String id = "id-value";
606-
private final String sort = "sort-value";
607-
608-
Object bean() {
609-
SimpleBean item = new SimpleBean();
610-
item.setId(id);
611-
item.setSort(sort);
612-
item.setStringAttribute("stringAttribute-value");
613-
return item;
614-
}
615-
616-
Object beanPartial() {
617-
SimpleBean item = new SimpleBean();
618-
item.setId(id);
619-
item.setSort(sort);
620-
return item;
621-
}
622-
623-
Object beanItem1() {
624-
SimpleBean item = new SimpleBean();
625-
item.setId(id);
626-
item.setSort(sort);
627-
item.setStringAttribute("stringAttribute-value-item1");
628-
return item;
629-
}
630-
631-
Object beanItem2() {
632-
SimpleBean item = new SimpleBean();
633-
item.setId(id);
634-
item.setSort(sort);
635-
item.setStringAttribute("stringAttribute-value-item2");
636-
return item;
637-
}
638-
639-
Object beanUpdated() {
640-
SimpleBean item = new SimpleBean();
641-
item.setId(id);
642-
item.setSort(sort);
643-
item.setStringAttribute("stringAttribute-value-updated");
644-
return item;
645-
}
646-
647-
Object beanUpdatedNullString() {
648-
SimpleBean item = new SimpleBean();
649-
item.setId(id);
650-
item.setSort(sort);
651-
item.setStringAttribute(null);
652-
return item;
653-
}
654-
655-
Object immutable() {
656-
return SimpleImmutable.builder()
657-
.id(id)
658-
.sort(sort)
659-
.stringAttribute("stringAttribute-value")
660-
.build();
661-
}
662-
663-
Object immutablePartial() {
664-
return SimpleImmutable.builder()
665-
.id(id)
666-
.sort(sort)
667-
.build();
668-
}
669-
670-
Object immutableItem1() {
671-
return SimpleImmutable.builder()
672-
.id(id)
673-
.sort(sort)
674-
.stringAttribute("stringAttribute-value-item1")
675-
.build();
676-
}
677-
678-
Object immutableItem2() {
679-
return SimpleImmutable.builder()
680-
.id(id)
681-
.sort(sort)
682-
.stringAttribute("stringAttribute-value-item2")
683-
.build();
684-
}
685-
686-
Object immutableUpdated() {
687-
return SimpleImmutable.builder()
688-
.id(id)
689-
.sort(sort)
690-
.stringAttribute("stringAttribute-value-updated")
691-
.build();
692-
}
693-
694-
Object immutableUpdatedNullString() {
695-
return SimpleImmutable.builder()
696-
.id(id)
697-
.sort(sort)
698-
.stringAttribute(null)
699-
.build();
700-
}
701-
702-
@Override
703-
public boolean equals(Object o) {
704-
return super.equals(o);
705-
}
706-
707-
@Override
708-
public int hashCode() {
709-
return Objects.hash(id, sort);
710-
}
711-
}
712572
}
713573

0 commit comments

Comments
 (0)