1
2
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
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
32
33 private static final String USERNAME = "username";
34
35
36
37
38 private static final String USERNAME22 = "username2";
39
40
41
42
43 private static final String USERNAME_KH = "kh";
44
45
46
47
48 private static final String USERNAME_NOT_AS_EXPECTED = "Username not as expected";
49
50
51
52
53 private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected";
54
55
56
57
58
59 UsernameTests()
60 {
61 super();
62 }
63
64
65
66
67
68
69
70 @ParameterizedTest
71 @ValueSource(strings = {UsernameTests.USERNAME_KH, UsernameTests.USERNAME, "username@example.com", "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234"})
72 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
81
82 @Test
83 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
93
94
95
96 @ParameterizedTest
97 @ValueSource(strings = {"", "k", "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"})
98 void testUsernameLength(final String username)
99 {
100 assertThrows(IllegalArgumentException.class, () ->
101 {
102 Username.of(username);
103 }, UsernameTests.ILLEGAL_ARGUMENT
104 );
105 }
106
107
108
109
110
111 @Test
112 void testUsernameWithIllegalCharacters0()
113 {
114 final IUsernameStrategy strategy = UsernameDefaultStrategy.of();
115 assertThrows(IllegalArgumentException.class, () ->
116 {
117 Username.of(strategy, "^!$%&(){}[]=?+*#´üöäÖÄÜß§;,:'\"");
118 }, UsernameTests.ILLEGAL_ARGUMENT
119 );
120 }
121
122
123
124
125
126 @Test
127 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
136
137 @Test
138 void testGetisEmailTrue()
139 {
140 final Username username = Username.of(UsernameDefaultStrategy.of(), "username@example.com");
141 assertTrue(username.isEMail(), "Username is not an email address");
142 }
143
144
145
146
147
148 @Test
149 void testGetisEmailFalse()
150 {
151 final Username username = Username.of(UsernameDefaultStrategy.of(), UsernameTests.USERNAME);
152 assertFalse(username.isEMail(), "Username is an email address");
153 }
154
155
156
157
158
159 @Test
160 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",
166 () -> assertEquals(username1.hashCode(), username2.hashCode(), "hashCodes are not equal"),
167 () -> assertNotEquals(username1.hashCode(), username3.hashCode(), "hashCodes are equal")
168 );
169 }
170
171
172
173
174
175 @Test
176 @SuppressWarnings("java:S5785")
177 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",
184 () -> assertTrue(username1.equals(username1), "username11 is not equal"),
185 () -> assertTrue(username1.equals(username2), "username12 are not equal"),
186 () -> assertTrue(username2.equals(username1), "username21 are not equal"),
187 () -> assertTrue(username2.equals(username4), "username24 are not equal"),
188 () -> assertTrue(username1.equals(username4), "username14 are not equal"),
189 () -> assertFalse(username1.equals(username3), "username13 are equal"),
190 () -> assertFalse(username3.equals(username1), "username31 are equal"),
191 () -> assertFalse(username1.equals(null), "username10 is equal")
192 );
193 }
194
195
196
197
198
199 @Test
200 void testToString()
201 {
202 final Username username = Username.of(UsernameTests.USERNAME);
203 assertEquals("Username[username=username]", username.toString(), "toString not equal");
204 }
205
206
207
208
209
210 @Test
211 @SuppressWarnings("java:S5785")
212 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");
218 final Username username5 = Username.of(UsernameTests.USERNAME);
219 assertAll("testCompareTo",
220 () -> assertTrue(username1.compareTo(username2) == -username2.compareTo(username1), "reflexive1"),
221 () -> assertTrue(username1.compareTo(username3) == -username3.compareTo(username1), "reflexive2"),
222 () -> assertTrue((username4.compareTo(username3) > 0) && (username3.compareTo(username1) > 0) && (username4.compareTo(username1) > 0), "transitive1"),
223 () -> assertTrue((username1.compareTo(username2) == 0) && (Math.abs(username1.compareTo(username5)) == Math.abs(username2.compareTo(username5))), "sgn1"),
224 () -> assertTrue((username1.compareTo(username2) == 0) && username1.equals(username2), "equals")
225 );
226 }
227
228 }