16
16
package software .amazon .awssdk .enhanced .dynamodb ;
17
17
18
18
import static org .assertj .core .api .Assertions .assertThat ;
19
- import static software .amazon .awssdk .enhanced .dynamodb .mapper .StaticAttributeTags .secondaryPartitionKey ;
20
- import static software .amazon .awssdk .enhanced .dynamodb .mapper .StaticAttributeTags .secondarySortKey ;
19
+ import static org .assertj .core .api .Assertions .assertThatThrownBy ;
21
20
22
- import org .assertj .core .data .Offset ;
21
+ import java .util .concurrent .CompletionException ;
22
+ import org .junit .After ;
23
23
import org .junit .AfterClass ;
24
24
import org .junit .BeforeClass ;
25
25
import org .junit .Test ;
26
+ import software .amazon .awssdk .enhanced .dynamodb .model .DeleteItemEnhancedRequest ;
26
27
import software .amazon .awssdk .enhanced .dynamodb .model .DeleteItemEnhancedResponse ;
27
28
import software .amazon .awssdk .enhanced .dynamodb .model .EnhancedLocalSecondaryIndex ;
28
29
import software .amazon .awssdk .enhanced .dynamodb .model .GetItemEnhancedResponse ;
32
33
import software .amazon .awssdk .enhanced .dynamodb .model .UpdateItemEnhancedRequest ;
33
34
import software .amazon .awssdk .enhanced .dynamodb .model .UpdateItemEnhancedResponse ;
34
35
import software .amazon .awssdk .services .dynamodb .DynamoDbAsyncClient ;
35
- import software .amazon .awssdk .services .dynamodb .model .ConsumedCapacity ;
36
+ import software .amazon .awssdk .services .dynamodb .model .ConditionalCheckFailedException ;
36
37
import software .amazon .awssdk .services .dynamodb .model .Projection ;
37
38
import software .amazon .awssdk .services .dynamodb .model .ProjectionType ;
38
39
import software .amazon .awssdk .services .dynamodb .model .ReturnConsumedCapacity ;
39
40
import software .amazon .awssdk .services .dynamodb .model .ReturnItemCollectionMetrics ;
41
+ import software .amazon .awssdk .services .dynamodb .model .ReturnValuesOnConditionCheckFailure ;
40
42
41
43
public class AsyncCrudWithResponseIntegrationTest extends DynamoDbEnhancedIntegrationTestBase {
42
44
43
45
44
46
private static final String TABLE_NAME = createTestTableName ();
45
-
46
-
47
47
private static final EnhancedLocalSecondaryIndex LOCAL_SECONDARY_INDEX = EnhancedLocalSecondaryIndex .builder ()
48
48
.indexName ("index1" )
49
49
.projection (Projection .builder ()
@@ -56,16 +56,24 @@ public class AsyncCrudWithResponseIntegrationTest extends DynamoDbEnhancedIntegr
56
56
private static DynamoDbAsyncTable <Record > mappedTable ;
57
57
58
58
@ BeforeClass
59
- public static void setup () {
59
+ public static void beforeClass () {
60
60
dynamoDbClient = createAsyncDynamoDbClient ();
61
61
enhancedClient = DynamoDbEnhancedAsyncClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
62
62
mappedTable = enhancedClient .table (TABLE_NAME , TABLE_SCHEMA );
63
63
mappedTable .createTable (r -> r .localSecondaryIndices (LOCAL_SECONDARY_INDEX )).join ();
64
64
dynamoDbClient .waiter ().waitUntilTableExists (r -> r .tableName (TABLE_NAME )).join ();
65
65
}
66
66
67
+ @ After
68
+ public void tearDown () {
69
+ mappedTable .scan ()
70
+ .items ()
71
+ .subscribe (record -> mappedTable .deleteItem (record ).join ())
72
+ .join ();
73
+ }
74
+
67
75
@ AfterClass
68
- public static void teardown () {
76
+ public static void afterClass () {
69
77
try {
70
78
dynamoDbClient .deleteTable (r -> r .tableName (TABLE_NAME )).join ();
71
79
} finally {
@@ -125,33 +133,149 @@ public void updateItem_returnItemCollectionMetrics_set_itemCollectionMetricsNotN
125
133
}
126
134
127
135
@ Test
128
- public void deleteItem_returnConsumedCapacity_unset_consumedCapacityNull () {
136
+ public void deleteItem_returnItemCollectionMetrics_set_itemCollectionMetricsNull () {
129
137
Key key = Key .builder ().partitionValue ("1" ).sortValue (10 ).build ();
130
138
131
139
DeleteItemEnhancedResponse <Record > response = mappedTable .deleteItemWithResponse (r -> r .key (key )).join ();
132
140
133
- assertThat (response .consumedCapacity ()).isNull ();
141
+ assertThat (response .itemCollectionMetrics ()).isNull ();
134
142
}
135
143
136
144
@ Test
137
- public void deleteItem_returnConsumedCapacity_set_consumedCapacityNotNull () {
145
+ public void deleteItem_returnItemCollectionMetrics_set_itemCollectionMetricsNotNull () {
138
146
Key key = Key .builder ().partitionValue ("1" ).sortValue (10 ).build ();
139
147
140
148
DeleteItemEnhancedResponse <Record > response =
141
- mappedTable .deleteItemWithResponse (r -> r .key (key ).returnConsumedCapacity (ReturnConsumedCapacity .TOTAL )).join ();
149
+ mappedTable .deleteItemWithResponse (r -> r .key (key ).returnItemCollectionMetrics (ReturnItemCollectionMetrics .SIZE ))
150
+ .join ();
142
151
143
- assertThat (response .consumedCapacity ()).isNotNull ();
152
+ assertThat (response .itemCollectionMetrics ()).isNotNull ();
153
+ }
154
+
155
+ @ Test
156
+ public void putItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNull () {
157
+ Record record = new Record ().setId ("1" ).setSort (10 );
158
+ mappedTable .putItem (record ).join ();
159
+
160
+ Expression itemDoesNotExist = Expression .builder ().expression ("attribute_not_exists(id)" ).build ();
161
+ PutItemEnhancedRequest <Record > request = PutItemEnhancedRequest .builder (Record .class )
162
+ .item (record )
163
+ .conditionExpression (itemDoesNotExist )
164
+ .build ();
165
+
166
+ assertThatThrownBy (() -> mappedTable .putItem (request ).join ())
167
+ .isInstanceOf (CompletionException .class )
168
+ .satisfies (e -> assertThat (((ConditionalCheckFailedException ) e .getCause ()).hasItem ()).isFalse ());
169
+ }
170
+
171
+ @ Test
172
+ public void putItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNotNull () {
173
+ Record record = new Record ().setId ("1" ).setSort (10 );
174
+ mappedTable .putItem (record ).join ();
175
+
176
+ Expression itemDoesNotExist = Expression .builder ().expression ("attribute_not_exists(id)" ).build ();
177
+ PutItemEnhancedRequest <Record > request = PutItemEnhancedRequest .builder (Record .class )
178
+ .item (record )
179
+ .conditionExpression (itemDoesNotExist )
180
+ .returnValuesOnConditionCheckFailure (ReturnValuesOnConditionCheckFailure .ALL_OLD )
181
+ .build ();
182
+
183
+ assertThatThrownBy (() -> mappedTable .putItem (request ).join ())
184
+ .isInstanceOf (CompletionException .class )
185
+ .satisfies (e -> assertThat (((ConditionalCheckFailedException ) e .getCause ()).hasItem ()).isTrue ());
186
+ }
187
+
188
+ @ Test
189
+ public void updateItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNull () {
190
+ Record record = new Record ().setId ("1" ).setSort (10 );
191
+ mappedTable .putItem (record ).join ();
192
+
193
+ Expression itemDoesNotExist = Expression .builder ().expression ("attribute_not_exists(id)" ).build ();
194
+ UpdateItemEnhancedRequest <Record > request = UpdateItemEnhancedRequest .builder (Record .class )
195
+ .item (record )
196
+ .conditionExpression (itemDoesNotExist )
197
+ .build ();
198
+
199
+ assertThatThrownBy (() -> mappedTable .updateItem (request ).join ())
200
+ .isInstanceOf (CompletionException .class )
201
+ .satisfies (e -> assertThat (((ConditionalCheckFailedException ) e .getCause ()).hasItem ()).isFalse ());
202
+ }
203
+
204
+ @ Test
205
+ public void updateItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNotNull () {
206
+ Record record = new Record ().setId ("1" ).setSort (10 );
207
+ mappedTable .putItem (record ).join ();
208
+
209
+ Expression itemDoesNotExist = Expression .builder ().expression ("attribute_not_exists(id)" ).build ();
210
+ UpdateItemEnhancedRequest <Record > request = UpdateItemEnhancedRequest .builder (Record .class )
211
+ .item (record )
212
+ .conditionExpression (itemDoesNotExist )
213
+ .returnValuesOnConditionCheckFailure (ReturnValuesOnConditionCheckFailure .ALL_OLD )
214
+ .build ();
215
+
216
+ assertThatThrownBy (() -> mappedTable .updateItem (request ).join ())
217
+ .isInstanceOf (CompletionException .class )
218
+ .satisfies (e -> assertThat (((ConditionalCheckFailedException ) e .getCause ()).hasItem ()).isTrue ());
219
+ }
220
+
221
+ @ Test
222
+ public void deleteItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNull () {
223
+ Record record = new Record ().setId ("1" ).setSort (10 );
224
+ Key recordKey = Key .builder ()
225
+ .partitionValue (record .getId ())
226
+ .sortValue (record .getSort ())
227
+ .build ();
228
+ mappedTable .putItem (record ).join ();
229
+
230
+ Expression itemDoesNotExist = Expression .builder ().expression ("attribute_not_exists(id)" ).build ();
231
+ DeleteItemEnhancedRequest request = DeleteItemEnhancedRequest .builder ()
232
+ .key (recordKey )
233
+ .conditionExpression (itemDoesNotExist )
234
+ .build ();
235
+
236
+ assertThatThrownBy (() -> mappedTable .deleteItem (request ).join ())
237
+ .isInstanceOf (CompletionException .class )
238
+ .satisfies (e -> assertThat (((ConditionalCheckFailedException ) e .getCause ()).hasItem ()).isFalse ());
239
+ }
240
+
241
+ @ Test
242
+ public void deleteItem_returnValuesOnConditionCheckFailure_set_returnValuesOnConditionCheckFailureNotNull () {
243
+ Record record = new Record ().setId ("1" ).setSort (10 );
244
+ Key recordKey = Key .builder ()
245
+ .partitionValue (record .getId ())
246
+ .sortValue (record .getSort ())
247
+ .build ();
248
+ mappedTable .putItem (record ).join ();
249
+
250
+ Expression itemDoesNotExist = Expression .builder ().expression ("attribute_not_exists(id)" ).build ();
251
+ DeleteItemEnhancedRequest request = DeleteItemEnhancedRequest .builder ()
252
+ .key (recordKey )
253
+ .conditionExpression (itemDoesNotExist )
254
+ .returnValuesOnConditionCheckFailure (ReturnValuesOnConditionCheckFailure .ALL_OLD )
255
+ .build ();
256
+
257
+ assertThatThrownBy (() -> mappedTable .deleteItem (request ).join ())
258
+ .isInstanceOf (CompletionException .class )
259
+ .satisfies (e -> assertThat (((ConditionalCheckFailedException ) e .getCause ()).hasItem ()).isTrue ());
260
+ }
261
+
262
+ @ Test
263
+ public void deleteItem_returnConsumedCapacity_unset_consumedCapacityNull () {
264
+ Key key = Key .builder ().partitionValue ("1" ).sortValue (10 ).build ();
265
+
266
+ DeleteItemEnhancedResponse <Record > response = mappedTable .deleteItemWithResponse (r -> r .key (key )).join ();
267
+
268
+ assertThat (response .consumedCapacity ()).isNull ();
144
269
}
145
270
146
271
@ Test
147
- public void delete_returnItemCollectionMetrics_set_itemCollectionMetricsNotNull () {
272
+ public void deleteItem_returnConsumedCapacity_set_consumedCapacityNotNull () {
148
273
Key key = Key .builder ().partitionValue ("1" ).sortValue (10 ).build ();
149
274
150
275
DeleteItemEnhancedResponse <Record > response =
151
- mappedTable .deleteItemWithResponse (r -> r .key (key ).returnItemCollectionMetrics (ReturnItemCollectionMetrics .SIZE ))
152
- .join ();
276
+ mappedTable .deleteItemWithResponse (r -> r .key (key ).returnConsumedCapacity (ReturnConsumedCapacity .TOTAL )).join ();
153
277
154
- assertThat (response .itemCollectionMetrics ()).isNotNull ();
278
+ assertThat (response .consumedCapacity ()).isNotNull ();
155
279
}
156
280
157
281
@ Test
0 commit comments