source: josm/trunk/test/unit/org/openstreetmap/josm/data/UserIdentityManagerTest.java

Last change on this file was 18037, checked in by Don-vip, 4 years ago

fix #21064 - Add JUnit 5 extension for preferences (patch by taylor.smock)

  • Property svn:eol-style set to native
File size: 11.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.assertFalse;
6import static org.junit.jupiter.api.Assertions.assertNotNull;
7import static org.junit.jupiter.api.Assertions.assertNull;
8import static org.junit.jupiter.api.Assertions.assertSame;
9import static org.junit.jupiter.api.Assertions.assertThrows;
10import static org.junit.jupiter.api.Assertions.assertTrue;
11import static org.junit.jupiter.api.Assertions.fail;
12
13import java.util.function.Function;
14import java.util.stream.Stream;
15
16import org.openstreetmap.josm.data.osm.User;
17import org.openstreetmap.josm.data.osm.UserInfo;
18import org.openstreetmap.josm.spi.preferences.Config;
19import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
20
21import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
22import org.junit.jupiter.api.Test;
23import org.junit.jupiter.params.ParameterizedTest;
24import org.junit.jupiter.params.provider.Arguments;
25import org.junit.jupiter.params.provider.MethodSource;
26
27/**
28 * Unit tests of {@link UserIdentityManager} class.
29 */
30@BasicPreferences
31class UserIdentityManagerTest {
32 private static UserInfo newUserInfo() {
33 return newUserInfo(1, "a description");
34 }
35
36 private static UserInfo newUserInfo(int id, String description) {
37 UserInfo userInfo = new UserInfo();
38 userInfo.setId(id);
39 userInfo.setDescription(description);
40 return userInfo;
41 }
42
43 /**
44 * Test singleton access.
45 */
46 @Test
47 void testSingletonAccess() {
48
49 UserIdentityManager im = UserIdentityManager.getInstance();
50
51 // created ?
52 assertNotNull(im);
53
54 UserIdentityManager im2 = UserIdentityManager.getInstance();
55
56 // only one instance
57 assertSame(im, im2);
58 }
59
60 /**
61 * Unit test of {@link UserIdentityManager#setAnonymous}.
62 */
63 @Test
64 void testSetAnonymous() {
65 UserIdentityManager im = UserIdentityManager.getInstance();
66
67 im.setPartiallyIdentified("test");
68 im.setAnonymous();
69
70 assertTrue(im.isAnonymous());
71 assertFalse(im.isPartiallyIdentified());
72 assertFalse(im.isFullyIdentified());
73
74 assertEquals(0, im.getUserId());
75 assertNull(im.getUserName());
76 assertNull(im.getUserInfo());
77 assertSame(User.getAnonymous(), im.asUser());
78 }
79
80 /**
81 * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - nominal case.
82 */
83 @Test
84 void testSetPartiallyIdentified() {
85 UserIdentityManager im = UserIdentityManager.getInstance();
86 im.setPartiallyIdentified("test");
87
88 assertFalse(im.isAnonymous());
89 assertTrue(im.isPartiallyIdentified());
90 assertFalse(im.isFullyIdentified());
91
92 assertEquals(0, im.getUserId());
93 assertEquals("test", im.getUserName());
94 assertNull(im.getUserInfo());
95 User usr = im.asUser();
96 assertEquals(0, usr.getId());
97 assertEquals("test", usr.getName());
98 }
99
100 /**
101 * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - null case.
102 */
103 @Test
104 @SuppressFBWarnings(value = "NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS")
105 void testSetPartiallyIdentifiedNull() {
106 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setPartiallyIdentified(null));
107 }
108
109 /**
110 * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - empty case.
111 */
112 @Test
113 void testSetPartiallyIdentifiedEmpty() {
114 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setPartiallyIdentified(""));
115 }
116
117 /**
118 * Unit test of {@link UserIdentityManager#setPartiallyIdentified} - blank case.
119 */
120 @Test
121 void testSetPartiallyIdentifiedBlank() {
122 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setPartiallyIdentified(" \t "));
123 }
124
125 /**
126 * Unit test of {@link UserIdentityManager#setFullyIdentified} - nominal case.
127 */
128 @Test
129 void testSetFullyIdentified() {
130 UserIdentityManager im = UserIdentityManager.getInstance();
131
132 UserInfo userInfo = newUserInfo();
133
134 im.setFullyIdentified("test", userInfo);
135
136 assertFalse(im.isAnonymous());
137 assertFalse(im.isPartiallyIdentified());
138 assertTrue(im.isFullyIdentified());
139
140 assertEquals(1, im.getUserId());
141 assertEquals("test", im.getUserName());
142 assertEquals(userInfo, im.getUserInfo());
143 User usr = im.asUser();
144 assertEquals(1, usr.getId());
145 assertEquals("test", usr.getName());
146 }
147
148 /**
149 * Unit test of {@link UserIdentityManager#setFullyIdentified} - null name case.
150 */
151 @Test
152 @SuppressFBWarnings(value = "NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS")
153 void testSetFullyIdentifiedNullName() {
154 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setFullyIdentified(null, newUserInfo()));
155 }
156
157 /**
158 * Unit test of {@link UserIdentityManager#setFullyIdentified} - empty name case.
159 */
160 @Test
161 void testSetFullyIdentifiedEmptyName() {
162 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setFullyIdentified("", newUserInfo()));
163 }
164
165 /**
166 * Unit test of {@link UserIdentityManager#setFullyIdentified} - blank name case.
167 */
168 @Test
169 void testSetFullyIdentifiedBlankName() {
170 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setFullyIdentified(" \t ", newUserInfo()));
171 }
172
173 /**
174 * Unit test of {@link UserIdentityManager#setFullyIdentified} - null info case.
175 */
176 @Test
177 void testSetFullyIdentifiedNullInfo() {
178 assertThrows(IllegalArgumentException.class, () -> UserIdentityManager.getInstance().setFullyIdentified("test", null));
179 }
180
181 static Stream<Arguments> testInitFromPreferences() {
182 return Stream.of(
183 Arguments.of((Function<UserIdentityManager, Boolean>) UserIdentityManager::isAnonymous,
184 new String[] {"osm-server.url", null, "osm-server.username", null},
185 "Preferences include neither an url nor a user name => we have an anonymous user"),
186 Arguments.of((Function<UserIdentityManager, Boolean>) UserIdentityManager::isAnonymous,
187 new String[] {"osm-server.url", "http://api.openstreetmap.org", "osm-server.username", null},
188 "Preferences include neither an url nor a user name => we have an anonymous user"),
189 Arguments.of((Function<UserIdentityManager, Boolean>) UserIdentityManager::isPartiallyIdentified,
190 new String[] {"osm-server.url", "http://api.openstreetmap.org", "osm-server.username", "test"},
191 "Preferences include an user name => we have a partially identified user")
192 );
193 }
194
195 @ParameterizedTest
196 @MethodSource
197 void testInitFromPreferences(Function<UserIdentityManager, Boolean> verifier, String[] config, String failureMessage) {
198 if (config.length % 2 != 0) {
199 fail("The arguments must be paired");
200 }
201 UserIdentityManager im = UserIdentityManager.getInstance();
202
203 // reset it
204 im.setAnonymous();
205
206 // for this test we disable the listener
207 Config.getPref().removePreferenceChangeListener(im);
208
209 try {
210 for (int i = 0; i < config.length / 2; i++) {
211 Config.getPref().put(config[2 * i], config[2 * i + 1]);
212 }
213
214 im.initFromPreferences();
215
216 assertTrue(verifier.apply(im), failureMessage);
217 } finally {
218 Config.getPref().addPreferenceChangeListener(im);
219 }
220 }
221
222 /**
223 * Preferences include an user name which is different from the current
224 * user name and we are currently fully identifed => josm user becomes
225 * partially identified
226 *
227 * Note: Test #4 since the other three are parameterized
228 */
229 @Test
230 void testInitFromPreferences4() {
231 UserIdentityManager im = UserIdentityManager.getInstance();
232
233 // for this test we disable the listener
234 Config.getPref().removePreferenceChangeListener(im);
235
236 try {
237 im.setFullyIdentified("test1", newUserInfo());
238
239 Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
240 Config.getPref().put("osm-server.username", "test2");
241
242 im.initFromPreferences();
243
244 assertTrue(im.isPartiallyIdentified());
245 } finally {
246 Config.getPref().addPreferenceChangeListener(im);
247 }
248 }
249
250 /**
251 * Preferences include an user name which is the same as the current
252 * user name and we are currently fully identifed => josm user remains
253 * fully identified
254 */
255 @Test
256 void testInitFromPreferences5() {
257 UserIdentityManager im = UserIdentityManager.getInstance();
258
259 // for this test we disable the listener
260 Config.getPref().removePreferenceChangeListener(im);
261
262 try {
263 im.setFullyIdentified("test1", new UserInfo());
264
265 Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
266 Config.getPref().put("osm-server.username", "test1");
267
268 im.initFromPreferences();
269
270 assertTrue(im.isFullyIdentified());
271 } finally {
272 Config.getPref().addPreferenceChangeListener(im);
273 }
274 }
275
276 @Test
277 void testApiUrlChanged() {
278 UserIdentityManager im = UserIdentityManager.getInstance();
279
280 // reset it
281 im.setAnonymous();
282
283 Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
284 assertTrue(im.isAnonymous());
285
286 Config.getPref().put("osm-server.url", null);
287 assertTrue(im.isAnonymous());
288
289 // reset it
290 im.setPartiallyIdentified("test");
291
292 Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
293 assertTrue(im.isPartiallyIdentified());
294 assertEquals("test", im.getUserName());
295
296 Config.getPref().put("osm-server.url", null);
297 assertTrue(im.isAnonymous());
298
299 // reset it
300 im.setFullyIdentified("test", newUserInfo());
301
302 Config.getPref().put("osm-server.url", "http://api.openstreetmap.org");
303 assertTrue(im.isPartiallyIdentified());
304 assertEquals("test", im.getUserName());
305
306 // reset it
307 im.setFullyIdentified("test", newUserInfo());
308
309 Config.getPref().put("osm-server.url", null);
310 assertTrue(im.isAnonymous());
311 }
312
313 @Test
314 void testUserNameChanged() {
315 UserIdentityManager im = UserIdentityManager.getInstance();
316
317 // reset it
318 im.setAnonymous();
319
320 Config.getPref().put("osm-server.username", "test");
321 assertTrue(im.isPartiallyIdentified());
322 assertEquals("test", im.getUserName());
323
324 Config.getPref().put("osm-server.username", null);
325 assertTrue(im.isAnonymous());
326 assertEquals(User.getAnonymous(), im.asUser());
327
328 // reset it
329 im.setPartiallyIdentified("test1");
330
331 Config.getPref().put("osm-server.username", "test2");
332 assertTrue(im.isPartiallyIdentified());
333 assertEquals("test2", im.getUserName());
334 User usr = im.asUser();
335 assertEquals(0, usr.getId());
336 assertEquals("test2", usr.getName());
337
338 Config.getPref().put("osm-server.username", null);
339 assertTrue(im.isAnonymous());
340
341 // reset it
342 im.setFullyIdentified("test1", newUserInfo());
343
344 Config.getPref().put("osm-server.username", "test2");
345 assertTrue(im.isPartiallyIdentified());
346 assertEquals("test2", im.getUserName());
347 usr = im.asUser();
348 assertEquals(0, usr.getId());
349 assertEquals("test2", usr.getName());
350
351 // reset it
352 im.setFullyIdentified("test1", newUserInfo());
353
354 Config.getPref().put("osm-server.username", null);
355 assertTrue(im.isAnonymous());
356 }
357}
Note: See TracBrowser for help on using the repository browser.