|
18 | 18 |
|
19 | 19 | import static org.junit.Assert.assertEquals;
|
20 | 20 | import static org.junit.Assert.assertFalse;
|
| 21 | +import static org.junit.Assert.assertNotEquals; |
21 | 22 | import static org.junit.Assert.assertNotNull;
|
22 | 23 | import static org.junit.Assert.assertNull;
|
23 | 24 | import static org.junit.Assert.assertTrue;
|
@@ -234,72 +235,134 @@ public void testLookupUserByFederatedId() throws Exception {
|
234 | 235 | public void testUserLifecycle() throws Exception {
|
235 | 236 | // Create user
|
236 | 237 | UserRecord userRecord = auth.createUserAsync(new CreateRequest()).get();
|
237 |
| - String uid = userRecord.getUid(); |
238 |
| - |
239 |
| - // Get user |
240 |
| - userRecord = auth.getUserAsync(userRecord.getUid()).get(); |
241 |
| - assertEquals(uid, userRecord.getUid()); |
242 |
| - assertNull(userRecord.getDisplayName()); |
243 |
| - assertNull(userRecord.getEmail()); |
244 |
| - assertNull(userRecord.getPhoneNumber()); |
245 |
| - assertNull(userRecord.getPhotoUrl()); |
246 |
| - assertFalse(userRecord.isEmailVerified()); |
247 |
| - assertFalse(userRecord.isDisabled()); |
248 |
| - assertTrue(userRecord.getUserMetadata().getCreationTimestamp() > 0); |
249 |
| - assertEquals(0, userRecord.getUserMetadata().getLastSignInTimestamp()); |
250 |
| - assertEquals(0, userRecord.getProviderData().length); |
251 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
252 |
| - |
253 |
| - // Update user |
254 |
| - RandomUser randomUser = RandomUser.create(); |
255 |
| - UpdateRequest request = userRecord.updateRequest() |
256 |
| - .setDisplayName("Updated Name") |
257 |
| - .setEmail(randomUser.email) |
258 |
| - .setPhoneNumber(randomUser.phone) |
259 |
| - .setPhotoUrl("https://example.com/photo.png") |
260 |
| - .setEmailVerified(true) |
261 |
| - .setPassword("secret"); |
262 |
| - userRecord = auth.updateUserAsync(request).get(); |
263 |
| - assertEquals(uid, userRecord.getUid()); |
264 |
| - assertEquals("Updated Name", userRecord.getDisplayName()); |
265 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
266 |
| - assertEquals(randomUser.phone, userRecord.getPhoneNumber()); |
267 |
| - assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
268 |
| - assertTrue(userRecord.isEmailVerified()); |
269 |
| - assertFalse(userRecord.isDisabled()); |
270 |
| - assertEquals(2, userRecord.getProviderData().length); |
271 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
272 |
| - |
273 |
| - // Get user by email |
274 |
| - userRecord = auth.getUserByEmailAsync(userRecord.getEmail()).get(); |
275 |
| - assertEquals(uid, userRecord.getUid()); |
276 |
| - |
277 |
| - // Disable user and remove properties |
278 |
| - request = userRecord.updateRequest() |
279 |
| - .setPhotoUrl(null) |
280 |
| - .setDisplayName(null) |
281 |
| - .setPhoneNumber(null) |
282 |
| - .setDisabled(true); |
283 |
| - userRecord = auth.updateUserAsync(request).get(); |
284 |
| - assertEquals(uid, userRecord.getUid()); |
285 |
| - assertNull(userRecord.getDisplayName()); |
286 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
287 |
| - assertNull(userRecord.getPhoneNumber()); |
288 |
| - assertNull(userRecord.getPhotoUrl()); |
289 |
| - assertTrue(userRecord.isEmailVerified()); |
290 |
| - assertTrue(userRecord.isDisabled()); |
291 |
| - assertEquals(1, userRecord.getProviderData().length); |
292 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
293 |
| - |
294 |
| - // Delete user |
295 |
| - auth.deleteUserAsync(userRecord.getUid()).get(); |
296 | 238 | try {
|
297 |
| - auth.getUserAsync(userRecord.getUid()).get(); |
298 |
| - fail("No error thrown for deleted user"); |
299 |
| - } catch (ExecutionException e) { |
300 |
| - assertTrue(e.getCause() instanceof FirebaseAuthException); |
301 |
| - assertEquals(FirebaseUserManager.USER_NOT_FOUND_ERROR, |
302 |
| - ((FirebaseAuthException) e.getCause()).getErrorCode()); |
| 239 | + String uid = userRecord.getUid(); |
| 240 | + |
| 241 | + // Get user |
| 242 | + userRecord = auth.getUserAsync(userRecord.getUid()).get(); |
| 243 | + assertEquals(uid, userRecord.getUid()); |
| 244 | + assertNull(userRecord.getDisplayName()); |
| 245 | + assertNull(userRecord.getEmail()); |
| 246 | + assertNull(userRecord.getPhoneNumber()); |
| 247 | + assertNull(userRecord.getPhotoUrl()); |
| 248 | + assertFalse(userRecord.isEmailVerified()); |
| 249 | + assertFalse(userRecord.isDisabled()); |
| 250 | + assertTrue(userRecord.getUserMetadata().getCreationTimestamp() > 0); |
| 251 | + assertEquals(0, userRecord.getUserMetadata().getLastSignInTimestamp()); |
| 252 | + assertEquals(0, userRecord.getProviderData().length); |
| 253 | + assertTrue(userRecord.getCustomClaims().isEmpty()); |
| 254 | + |
| 255 | + // Update user |
| 256 | + RandomUser randomUser = RandomUser.create(); |
| 257 | + UpdateRequest request = userRecord.updateRequest() |
| 258 | + .setDisplayName("Updated Name") |
| 259 | + .setEmail(randomUser.email) |
| 260 | + .setPhoneNumber(randomUser.phone) |
| 261 | + .setPhotoUrl("https://example.com/photo.png") |
| 262 | + .setEmailVerified(true) |
| 263 | + .setPassword("secret"); |
| 264 | + userRecord = auth.updateUserAsync(request).get(); |
| 265 | + assertEquals(uid, userRecord.getUid()); |
| 266 | + assertEquals("Updated Name", userRecord.getDisplayName()); |
| 267 | + assertEquals(randomUser.email, userRecord.getEmail()); |
| 268 | + assertEquals(randomUser.phone, userRecord.getPhoneNumber()); |
| 269 | + assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
| 270 | + assertTrue(userRecord.isEmailVerified()); |
| 271 | + assertFalse(userRecord.isDisabled()); |
| 272 | + assertEquals(2, userRecord.getProviderData().length); |
| 273 | + assertTrue(userRecord.getCustomClaims().isEmpty()); |
| 274 | + |
| 275 | + // Link user to IDP providers |
| 276 | + request = userRecord.updateRequest() |
| 277 | + .linkProvider( |
| 278 | + UserProvider |
| 279 | + .builder() |
| 280 | + .setUid("testuid") |
| 281 | + .setProviderId("google.com") |
| 282 | + |
| 283 | + .setDisplayName("Test User") |
| 284 | + .setPhotoUrl("https://test.com/user.png") |
| 285 | + .build()); |
| 286 | + userRecord = auth.updateUserAsync(request).get(); |
| 287 | + assertEquals(uid, userRecord.getUid()); |
| 288 | + assertEquals("Updated Name", userRecord.getDisplayName()); |
| 289 | + assertEquals(randomUser.email, userRecord.getEmail()); |
| 290 | + assertEquals(randomUser.phone, userRecord.getPhoneNumber()); |
| 291 | + assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
| 292 | + assertTrue(userRecord.isEmailVerified()); |
| 293 | + assertFalse(userRecord.isDisabled()); |
| 294 | + assertEquals(3, userRecord.getProviderData().length); |
| 295 | + List<String> providers = new ArrayList<>(); |
| 296 | + for (UserInfo provider : userRecord.getProviderData()) { |
| 297 | + providers.add(provider.getProviderId()); |
| 298 | + } |
| 299 | + assertTrue(providers.contains("google.com")); |
| 300 | + assertTrue(userRecord.getCustomClaims().isEmpty()); |
| 301 | + |
| 302 | + // Unlink phone provider |
| 303 | + request = userRecord.updateRequest().deleteProvider("phone"); |
| 304 | + userRecord = auth.updateUserAsync(request).get(); |
| 305 | + assertNull(userRecord.getPhoneNumber()); |
| 306 | + assertEquals(2, userRecord.getProviderData().length); |
| 307 | + providers.clear(); |
| 308 | + for (UserInfo provider : userRecord.getProviderData()) { |
| 309 | + providers.add(provider.getProviderId()); |
| 310 | + } |
| 311 | + assertFalse(providers.contains("phone")); |
| 312 | + assertEquals(uid, userRecord.getUid()); |
| 313 | + assertEquals("Updated Name", userRecord.getDisplayName()); |
| 314 | + assertEquals(randomUser.email, userRecord.getEmail()); |
| 315 | + assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
| 316 | + assertTrue(userRecord.isEmailVerified()); |
| 317 | + assertFalse(userRecord.isDisabled()); |
| 318 | + assertTrue(userRecord.getCustomClaims().isEmpty()); |
| 319 | + |
| 320 | + // Unlink IDP provider |
| 321 | + request = userRecord.updateRequest().deleteProvider("google.com"); |
| 322 | + userRecord = auth.updateUserAsync(request).get(); |
| 323 | + assertEquals(1, userRecord.getProviderData().length); |
| 324 | + assertNotEquals("google.com", userRecord.getProviderData()[0].getProviderId()); |
| 325 | + assertEquals(uid, userRecord.getUid()); |
| 326 | + assertEquals("Updated Name", userRecord.getDisplayName()); |
| 327 | + assertEquals(randomUser.email, userRecord.getEmail()); |
| 328 | + assertNull(userRecord.getPhoneNumber()); |
| 329 | + assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
| 330 | + assertTrue(userRecord.isEmailVerified()); |
| 331 | + assertFalse(userRecord.isDisabled()); |
| 332 | + assertTrue(userRecord.getCustomClaims().isEmpty()); |
| 333 | + |
| 334 | + // Get user by email |
| 335 | + userRecord = auth.getUserByEmailAsync(userRecord.getEmail()).get(); |
| 336 | + assertEquals(uid, userRecord.getUid()); |
| 337 | + |
| 338 | + // Disable user and remove properties |
| 339 | + request = userRecord.updateRequest() |
| 340 | + .setPhotoUrl(null) |
| 341 | + .setDisplayName(null) |
| 342 | + .setPhoneNumber(null) |
| 343 | + .setDisabled(true); |
| 344 | + userRecord = auth.updateUserAsync(request).get(); |
| 345 | + assertEquals(uid, userRecord.getUid()); |
| 346 | + assertNull(userRecord.getDisplayName()); |
| 347 | + assertEquals(randomUser.email, userRecord.getEmail()); |
| 348 | + assertNull(userRecord.getPhoneNumber()); |
| 349 | + assertNull(userRecord.getPhotoUrl()); |
| 350 | + assertTrue(userRecord.isEmailVerified()); |
| 351 | + assertTrue(userRecord.isDisabled()); |
| 352 | + assertEquals(1, userRecord.getProviderData().length); |
| 353 | + assertTrue(userRecord.getCustomClaims().isEmpty()); |
| 354 | + |
| 355 | + } finally { |
| 356 | + // Delete user |
| 357 | + auth.deleteUserAsync(userRecord.getUid()).get(); |
| 358 | + try { |
| 359 | + auth.getUserAsync(userRecord.getUid()).get(); |
| 360 | + fail("No error thrown for deleted user"); |
| 361 | + } catch (ExecutionException e) { |
| 362 | + assertTrue(e.getCause() instanceof FirebaseAuthException); |
| 363 | + assertEquals(FirebaseUserManager.USER_NOT_FOUND_ERROR, |
| 364 | + ((FirebaseAuthException) e.getCause()).getErrorCode()); |
| 365 | + } |
303 | 366 | }
|
304 | 367 | }
|
305 | 368 |
|
|
0 commit comments