View Javadoc
1   /*
2    * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved!
3    */
4   package de.powerstat.validation.values.test;
5   
6   
7   import static org.junit.jupiter.api.Assertions.assertAll;
8   import static org.junit.jupiter.api.Assertions.assertEquals;
9   import static org.junit.jupiter.api.Assertions.assertFalse;
10  import static org.junit.jupiter.api.Assertions.assertNotEquals;
11  import static org.junit.jupiter.api.Assertions.assertThrows;
12  import static org.junit.jupiter.api.Assertions.assertTrue;
13  
14  import org.junit.jupiter.api.Test;
15  import org.junit.jupiter.params.ParameterizedTest;
16  import org.junit.jupiter.params.provider.ValueSource;
17  
18  import de.powerstat.validation.values.Username;
19  import de.powerstat.validation.values.strategies.IUsernameStrategy;
20  import de.powerstat.validation.values.strategies.UsernameDefaultStrategy;
21  import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
22  
23  
24  /**
25   * Username tests.
26   */
27  @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"})
28  final class UsernameTests
29   {
30    /**
31     * Username.
32     */
33    private static final String USERNAME = "username"; //$NON-NLS-1$
34  
35    /**
36     * Username 2.
37     */
38    private static final String USERNAME22 = "username2"; //$NON-NLS-1$
39  
40    /**
41     * Username kh.
42     */
43    private static final String USERNAME_KH = "kh"; //$NON-NLS-1$
44  
45    /**
46     * Username not as expected constant.
47     */
48    private static final String USERNAME_NOT_AS_EXPECTED = "Username not as expected"; //$NON-NLS-1$
49  
50    /**
51     * Illegal argument exception expected constant.
52     */
53    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
54  
55  
56    /**
57     * Default constructor.
58     */
59    /* default */ UsernameTests()
60     {
61      super();
62     }
63  
64  
65    /**
66     * Test Username with valid values.
67     *
68     * @param username Username
69     */
70    @ParameterizedTest
71    @ValueSource(strings = {UsernameTests.USERNAME_KH, UsernameTests.USERNAME, "username@example.com", "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234"})
72    /* default */ void testUsernameOk0(final String username)
73     {
74      final Username cleanUsername = Username.of(username);
75      assertEquals(username, cleanUsername.stringValue(), UsernameTests.USERNAME_NOT_AS_EXPECTED);
76     }
77  
78  
79    /**
80     * Test Username chaching.
81     */
82    @Test
83    /* default */ void testUsernameCache()
84     {
85      final Username username1 = Username.of(UsernameDefaultStrategy.of(), UsernameTests.USERNAME_KH);
86      final Username username2 = Username.of(UsernameDefaultStrategy.of(), UsernameTests.USERNAME_KH);
87      assertEquals(username1, username2, UsernameTests.USERNAME_NOT_AS_EXPECTED);
88     }
89  
90  
91    /**
92     * Test Username with username to short or long.
93     *
94     * @param username Username
95     */
96    @ParameterizedTest
97    @ValueSource(strings = {"", "k", "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"})
98    /* default */ void testUsernameLength(final String username)
99     {
100     assertThrows(IllegalArgumentException.class, () ->
101      {
102       /* final Username cleanUsername = */ Username.of(username);
103      }, UsernameTests.ILLEGAL_ARGUMENT
104     );
105    }
106 
107 
108   /**
109    * Test Username with illegal characters.
110    */
111   @Test
112   /* default */ void testUsernameWithIllegalCharacters0()
113    {
114     final IUsernameStrategy strategy = UsernameDefaultStrategy.of();
115     assertThrows(IllegalArgumentException.class, () ->
116      {
117       /* final Username cleanUsername = */ Username.of(strategy, "^!$%&(){}[]=?+*#´üöäÖÄÜß§;,:'\""); //$NON-NLS-1$
118      }, UsernameTests.ILLEGAL_ARGUMENT
119     );
120    }
121 
122 
123   /**
124    * Test stringValue.
125    */
126   @Test
127   /* default */ void testStringValue()
128    {
129     final Username username = Username.of(UsernameTests.USERNAME);
130     assertEquals(UsernameTests.USERNAME, username.stringValue(), UsernameTests.USERNAME_NOT_AS_EXPECTED);
131    }
132 
133 
134   /**
135    * Test get isEMail true.
136    */
137   @Test
138   /* default */ void testGetisEmailTrue()
139    {
140     final Username username = Username.of(UsernameDefaultStrategy.of(), "username@example.com"); //$NON-NLS-1$
141     assertTrue(username.isEMail(), "Username is not an email address"); //$NON-NLS-1$
142    }
143 
144 
145   /**
146    * Test get isEMail false.
147    */
148   @Test
149   /* default */ void testGetisEmailFalse()
150    {
151     final Username username = Username.of(UsernameDefaultStrategy.of(), UsernameTests.USERNAME);
152     assertFalse(username.isEMail(), "Username is an email address"); //$NON-NLS-1$
153    }
154 
155 
156   /**
157    * Test hash code.
158    */
159   @Test
160   /* default */ void testHashCode()
161    {
162     final Username username1 = Username.of(UsernameTests.USERNAME);
163     final Username username2 = Username.of(UsernameTests.USERNAME);
164     final Username username3 = Username.of(UsernameTests.USERNAME22);
165     assertAll("testHashCode", //$NON-NLS-1$
166       () -> assertEquals(username1.hashCode(), username2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
167       () -> assertNotEquals(username1.hashCode(), username3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
168     );
169    }
170 
171 
172   /**
173    * Test equals.
174    */
175   @Test
176   @SuppressWarnings("java:S5785")
177   /* default */ void testEquals()
178    {
179     final Username username1 = Username.of(UsernameTests.USERNAME);
180     final Username username2 = Username.of(UsernameTests.USERNAME);
181     final Username username3 = Username.of(UsernameTests.USERNAME22);
182     final Username username4 = Username.of(UsernameTests.USERNAME);
183     assertAll("testEquals", //$NON-NLS-1$
184       () -> assertTrue(username1.equals(username1), "username11 is not equal"), //$NON-NLS-1$
185       () -> assertTrue(username1.equals(username2), "username12 are not equal"), //$NON-NLS-1$
186       () -> assertTrue(username2.equals(username1), "username21 are not equal"), //$NON-NLS-1$
187       () -> assertTrue(username2.equals(username4), "username24 are not equal"), //$NON-NLS-1$
188       () -> assertTrue(username1.equals(username4), "username14 are not equal"), //$NON-NLS-1$
189       () -> assertFalse(username1.equals(username3), "username13 are equal"), //$NON-NLS-1$
190       () -> assertFalse(username3.equals(username1), "username31 are equal"), //$NON-NLS-1$
191       () -> assertFalse(username1.equals(null), "username10 is equal") //$NON-NLS-1$
192     );
193    }
194 
195 
196   /**
197    * Test toString.
198    */
199   @Test
200   /* default */ void testToString()
201    {
202     final Username username = Username.of(UsernameTests.USERNAME);
203     assertEquals("Username[username=username]", username.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
204    }
205 
206 
207   /**
208    * Test compareTo.
209    */
210   @Test
211   @SuppressWarnings("java:S5785")
212   /* default */ void testCompareTo()
213    {
214     final Username username1 = Username.of(UsernameTests.USERNAME);
215     final Username username2 = Username.of(UsernameTests.USERNAME);
216     final Username username3 = Username.of(UsernameTests.USERNAME22);
217     final Username username4 = Username.of("username3"); //$NON-NLS-1$
218     final Username username5 = Username.of(UsernameTests.USERNAME);
219     assertAll("testCompareTo", //$NON-NLS-1$
220       () -> assertTrue(username1.compareTo(username2) == -username2.compareTo(username1), "reflexive1"), //$NON-NLS-1$
221       () -> assertTrue(username1.compareTo(username3) == -username3.compareTo(username1), "reflexive2"), //$NON-NLS-1$
222       () -> assertTrue((username4.compareTo(username3) > 0) && (username3.compareTo(username1) > 0) && (username4.compareTo(username1) > 0), "transitive1"), //$NON-NLS-1$
223       () -> assertTrue((username1.compareTo(username2) == 0) && (Math.abs(username1.compareTo(username5)) == Math.abs(username2.compareTo(username5))), "sgn1"), //$NON-NLS-1$
224       () -> assertTrue((username1.compareTo(username2) == 0) && username1.equals(username2), "equals") //$NON-NLS-1$
225     );
226    }
227 
228  }