View Javadoc
1   /*
2    * Copyright (c) 2012-2023, jcabi.com
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met: 1) Redistributions of source code must retain the above
8    * copyright notice, this list of conditions and the following
9    * disclaimer. 2) Redistributions in binary form must reproduce the above
10   * copyright notice, this list of conditions and the following
11   * disclaimer in the documentation and/or other materials provided
12   * with the distribution. 3) Neither the name of the jcabi.com nor
13   * the names of its contributors may be used to endorse or promote
14   * products derived from this software without specific prior written
15   * permission.
16   *
17   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21   * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28   * OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  package com.jcabi.dynamo;
31  
32  import com.amazonaws.services.dynamodbv2.model.AttributeValue;
33  import com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue;
34  import com.jcabi.immutable.ArrayMap;
35  import java.util.Collections;
36  import java.util.Map;
37  import org.hamcrest.MatcherAssert;
38  import org.hamcrest.Matchers;
39  import org.junit.jupiter.api.Test;
40  
41  /**
42   * Test case for {@link Attributes}.
43   * @since 0.1
44   */
45  @SuppressWarnings("PMD.UseConcurrentHashMap")
46  final class AttributesTest {
47  
48      @Test
49      void workAsMapOfAttributes() {
50          final String attr = "id";
51          final AttributeValue value = new AttributeValue("some text value");
52          final Map<String, AttributeValue> attrs = new Attributes()
53              .with(attr, value);
54          MatcherAssert.assertThat(attrs.keySet(), Matchers.hasSize(1));
55          MatcherAssert.assertThat(attrs, Matchers.hasEntry(attr, value));
56          MatcherAssert.assertThat(
57              new Attributes(attrs),
58              Matchers.hasEntry(attr, value)
59          );
60      }
61  
62      @Test
63      void buildsExpectedKeys() {
64          final String attr = "attr-13";
65          final String value = "some value \u20ac";
66          MatcherAssert.assertThat(
67              new Attributes().with(attr, value).asKeys(),
68              Matchers.hasEntry(
69                  attr,
70                  new ExpectedAttributeValue(new AttributeValue(value))
71              )
72          );
73      }
74  
75      @Test
76      void filtersOutUnnecessaryKeys() {
77          MatcherAssert.assertThat(
78              new Attributes()
79                  .with("first", "test-1")
80                  .with("second", "test-2")
81                  .only(Collections.singletonList("never"))
82                  .keySet(),
83              Matchers.empty()
84          );
85      }
86  
87      @Test
88      void caseSensitive() {
89          final String first = "Alpha";
90          final String second = "AlPha";
91          final String third = "Beta";
92          MatcherAssert.assertThat(
93              new Attributes().with(
94                  new ArrayMap<String, AttributeValue>()
95                      .with("Gamma", new AttributeValue(""))
96                      .with("gAMma", new AttributeValue(""))
97              ).keySet(),
98              Matchers.hasSize(2)
99          );
100         MatcherAssert.assertThat(
101             new Attributes()
102                 .with(first, "val-1")
103                 .with(second, "val-2"),
104             Matchers.allOf(
105                 Matchers.hasKey(first),
106                 Matchers.hasKey(second)
107             )
108         );
109         MatcherAssert.assertThat(
110             new Attributes()
111                 .with(third, "some text to use")
112                 .only(Collections.singletonList(third)),
113             Matchers.hasKey(third)
114         );
115     }
116 
117 }