2020import java .util .ArrayList ;
2121import java .util .List ;
2222import java .util .UUID ;
23+ import java .util .stream .Stream ;
2324import org .junit .jupiter .api .BeforeAll ;
2425import org .junit .jupiter .params .ParameterizedTest ;
2526import org .junit .jupiter .params .provider .Arguments ;
2627import org .junit .jupiter .params .provider .MethodSource ;
2728import org .springframework .lang .Nullable ;
2829import org .springframework .util .StringUtils ;
2930import software .amazon .awssdk .enhanced .dynamodb .*;
31+ import software .amazon .awssdk .enhanced .dynamodb .model .*;
3032import software .amazon .awssdk .enhanced .dynamodb .model .PageIterable ;
3133import software .amazon .awssdk .enhanced .dynamodb .model .QueryConditional ;
3234import software .amazon .awssdk .enhanced .dynamodb .model .QueryEnhancedRequest ;
4042 * @author Matej Nedic
4143 * @author Arun Patra
4244 * @author Artem Bilan
45+ * @author Marcus Voltolim
4346 */
4447public class DynamoDbTemplateIntegrationTest implements LocalstackContainerTest {
4548
@@ -51,7 +54,7 @@ public class DynamoDbTemplateIntegrationTest implements LocalstackContainerTest
5154 private static final String nameOfGSPK = "gsPk" ;
5255
5356 @ BeforeAll
54- public static void createTable () {
57+ static void createTable () {
5558 DynamoDbClient dynamoDbClient = LocalstackContainerTest .dynamoDbClient ();
5659 DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
5760
@@ -96,12 +99,36 @@ void dynamoDbTemplate_saveUpdateAndRead_entitySuccessful(DynamoDbTable<PersonEnt
9699 PersonEntity personEntity = new PersonEntity (UUID .randomUUID (), "foo" , "bar" );
97100 dynamoDbTemplate .save (personEntity );
98101
102+ personEntity .setName (null );
99103 personEntity .setLastName ("xxx" );
100104 dynamoDbTemplate .update (personEntity );
101105
102- PersonEntity personEntity1 = dynamoDbTemplate
103- .load (Key .builder ().partitionValue (personEntity .getUuid ().toString ()).build (), PersonEntity .class );
104- assertThat (personEntity1 ).isEqualTo (personEntity );
106+ Key key = Key .builder ().partitionValue (personEntity .getUuid ().toString ()).build ();
107+
108+ assertThat (dynamoDbTemplate .load (key , PersonEntity .class ))
109+ .extracting (PersonEntity ::getName , PersonEntity ::getLastName ).containsExactly (null , "xxx" );
110+
111+ // clean up
112+ cleanUp (dynamoDbTable , personEntity .getUuid ());
113+ }
114+
115+ @ ParameterizedTest
116+ @ MethodSource ("argumentSource" )
117+ void dynamoDbTemplate_saveUpdateIgnoreNullAndRead_entitySuccessful (DynamoDbTable <PersonEntity > dynamoDbTable ,
118+ DynamoDbTemplate dynamoDbTemplate ) {
119+ PersonEntity personEntity = new PersonEntity (UUID .randomUUID (), "foo" , "bar" );
120+ dynamoDbTemplate .save (personEntity );
121+
122+ personEntity .setName (null );
123+ personEntity .setLastName ("xxx" );
124+ UpdateItemEnhancedRequest <PersonEntity > request = UpdateItemEnhancedRequest .builder (PersonEntity .class )
125+ .item (personEntity ).ignoreNullsMode (IgnoreNullsMode .SCALAR_ONLY ).build ();
126+ dynamoDbTemplate .update (request );
127+
128+ Key key = Key .builder ().partitionValue (personEntity .getUuid ().toString ()).build ();
129+
130+ assertThat (dynamoDbTemplate .load (key , PersonEntity .class ))
131+ .extracting (PersonEntity ::getName , PersonEntity ::getLastName ).containsExactly ("foo" , "xxx" );
105132
106133 // clean up
107134 cleanUp (dynamoDbTable , personEntity .getUuid ());
@@ -299,16 +326,16 @@ public static void cleanUp(DynamoDbTable<PersonEntity> dynamoDbTable, UUID uuid)
299326 dynamoDbTable .deleteItem (Key .builder ().partitionValue (uuid .toString ()).build ());
300327 }
301328
302- private static java . util . stream . Stream <Arguments > argumentSource () {
303- return java . util . stream . Stream .of (Arguments .of (dynamoDbTable , dynamoDbTemplate ),
329+ private static Stream <Arguments > argumentSource () {
330+ return Stream .of (Arguments .of (dynamoDbTable , dynamoDbTemplate ),
304331 Arguments .of (prefixedDynamoDbTable , prefixedDynamoDbTemplate ));
305332 }
306333
307334 private static void describeAndCreateTable (DynamoDbClient dynamoDbClient , @ Nullable String tablePrefix ) {
308- ArrayList <AttributeDefinition > attributeDefinitions = new ArrayList <AttributeDefinition >();
335+ ArrayList <AttributeDefinition > attributeDefinitions = new ArrayList <>();
309336 attributeDefinitions .add (AttributeDefinition .builder ().attributeName ("uuid" ).attributeType ("S" ).build ());
310337 attributeDefinitions .add (AttributeDefinition .builder ().attributeName (nameOfGSPK ).attributeType ("S" ).build ());
311- ArrayList <KeySchemaElement > tableKeySchema = new ArrayList <KeySchemaElement >();
338+ ArrayList <KeySchemaElement > tableKeySchema = new ArrayList <>();
312339 tableKeySchema .add (KeySchemaElement .builder ().attributeName ("uuid" ).keyType (KeyType .HASH ).build ());
313340 List <KeySchemaElement > indexKeySchema = new ArrayList <>();
314341 indexKeySchema .add (KeySchemaElement .builder ().attributeName (nameOfGSPK ).keyType (KeyType .HASH ).build ());
@@ -332,4 +359,5 @@ private static void describeAndCreateTable(DynamoDbClient dynamoDbClient, @Nulla
332359 // table already exists, do nothing
333360 }
334361 }
362+
335363}
0 commit comments