View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2012-2026 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.jcabi.dynamo;
6   
7   import org.junit.jupiter.api.Test;
8   import org.mockito.Mockito;
9   import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
10  import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
11  import software.amazon.awssdk.services.dynamodb.model.ConsumedCapacity;
12  import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest;
13  import software.amazon.awssdk.services.dynamodb.model.DeleteItemResponse;
14  import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest;
15  import software.amazon.awssdk.services.dynamodb.model.DescribeTableResponse;
16  import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement;
17  import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
18  import software.amazon.awssdk.services.dynamodb.model.PutItemResponse;
19  import software.amazon.awssdk.services.dynamodb.model.TableDescription;
20  
21  /**
22   * Test case for {@link AwsTable}.
23   * @since 0.1
24   */
25  final class AwsTableTest {
26  
27      /**
28       * Constant for 'key' attribute.
29       */
30      private static final String KEY = "key";
31  
32      @Test
33      void savesItemToDynamo() throws Exception {
34          final Credentials credentials = Mockito.mock(Credentials.class);
35          final DynamoDbClient aws = Mockito.mock(DynamoDbClient.class);
36          Mockito.doReturn(aws).when(credentials).aws();
37          Mockito.doReturn(
38              PutItemResponse.builder().consumedCapacity(
39                  ConsumedCapacity.builder().capacityUnits(1.0d).build()
40              ).build()
41          ).when(aws).putItem(Mockito.any(PutItemRequest.class));
42          Mockito.doReturn(
43              DescribeTableResponse.builder().table(
44                  TableDescription.builder().keySchema(
45                      KeySchemaElement.builder().attributeName(AwsTableTest.KEY).build()
46                  ).build()
47              ).build()
48          ).when(aws).describeTable(Mockito.any(DescribeTableRequest.class));
49          final Table table = new AwsTable(
50              credentials, Mockito.mock(Region.class), "table-name"
51          );
52          table.put(
53              new Attributes().with(
54                  "attribute-1",
55                  AttributeValue.builder().s("value-1").build()
56              )
57          );
58          Mockito.verify(aws).putItem(Mockito.any(PutItemRequest.class));
59      }
60  
61      @Test
62      void deletesItemFromDynamo() throws Exception {
63          final Credentials credentials = Mockito.mock(Credentials.class);
64          final DynamoDbClient aws = Mockito.mock(DynamoDbClient.class);
65          Mockito.doReturn(aws).when(credentials).aws();
66          Mockito.doReturn(
67              DeleteItemResponse.builder().consumedCapacity(
68                  ConsumedCapacity.builder().capacityUnits(1.0d).build()
69              ).build()
70          ).when(aws).deleteItem(Mockito.any(DeleteItemRequest.class));
71          Mockito.doReturn(
72              DescribeTableResponse.builder().table(
73                  TableDescription.builder().keySchema(
74                      KeySchemaElement.builder().attributeName(AwsTableTest.KEY).build()
75                  ).build()
76              ).build()
77          ).when(aws).describeTable(Mockito.any(DescribeTableRequest.class));
78          final Table table = new AwsTable(
79              credentials, Mockito.mock(Region.class), "table-name-2"
80          );
81          table.delete(
82              new Attributes().with(
83                  "attribute-2",
84                  AttributeValue.builder().s("value-2").build()
85              )
86          );
87          Mockito.verify(aws).deleteItem(Mockito.any(DeleteItemRequest.class));
88      }
89  }