@@ -323,22 +323,106 @@ describe('admin.auth', () => {
323
323
} ) ;
324
324
} ) ;
325
325
326
- it ( 'updateUser() updates the user record with the given parameters' , ( ) => {
327
- const updatedDisplayName = 'Updated User ' + newUserUid ;
328
- return admin . auth ( ) . updateUser ( newUserUid , {
329
- email : updatedEmail ,
330
- phoneNumber : updatedPhone ,
331
- emailVerified : true ,
332
- displayName : updatedDisplayName ,
333
- } )
334
- . then ( ( userRecord ) => {
335
- expect ( userRecord . emailVerified ) . to . be . true ;
336
- expect ( userRecord . displayName ) . to . equal ( updatedDisplayName ) ;
337
- // Confirm expected email.
338
- expect ( userRecord . email ) . to . equal ( updatedEmail ) ;
339
- // Confirm expected phone number.
340
- expect ( userRecord . phoneNumber ) . to . equal ( updatedPhone ) ;
326
+ describe ( 'updateUser()' , ( ) => {
327
+ /**
328
+ * Creates a new user for testing purposes. The user's uid will be
329
+ * '$name_$tenRandomChars' and email will be
330
+
331
+ */
332
+ // TODO(rsgowman): This function could usefully be employed throughout this file.
333
+ function createTestUser ( name : string ) : Promise < admin . auth . UserRecord > {
334
+ const tenRandomChars = generateRandomString ( 10 ) ;
335
+ return admin . auth ( ) . createUser ( {
336
+ uid : name + '_' + tenRandomChars ,
337
+ displayName : name ,
338
+ email : name + '_' + tenRandomChars + '@example.com' ,
339
+ } ) ;
340
+ }
341
+
342
+ let updateUser : admin . auth . UserRecord ;
343
+ before ( async ( ) => {
344
+ updateUser = await createTestUser ( 'UpdateUser' ) ;
345
+ } ) ;
346
+
347
+ after ( ( ) => {
348
+ return safeDelete ( updateUser . uid ) ;
349
+ } ) ;
350
+
351
+ it ( 'updates the user record with the given parameters' , async ( ) => {
352
+ const updatedDisplayName = 'Updated User ' + updateUser . uid ;
353
+ const userRecord = await admin . auth ( ) . updateUser ( updateUser . uid , {
354
+ email : updatedEmail ,
355
+ phoneNumber : updatedPhone ,
356
+ emailVerified : true ,
357
+ displayName : updatedDisplayName ,
358
+ } ) ;
359
+
360
+ expect ( userRecord . emailVerified ) . to . be . true ;
361
+ expect ( userRecord . displayName ) . to . equal ( updatedDisplayName ) ;
362
+ // Confirm expected email.
363
+ expect ( userRecord . email ) . to . equal ( updatedEmail ) ;
364
+ // Confirm expected phone number.
365
+ expect ( userRecord . phoneNumber ) . to . equal ( updatedPhone ) ;
366
+ } ) ;
367
+
368
+ it ( 'can link/unlink with a federated provider' , async ( ) => {
369
+ const federatedUid = 'google_uid_' + generateRandomString ( 10 ) ;
370
+ let userRecord = await admin . auth ( ) . updateUser ( updateUser . uid , {
371
+ providerToLink : {
372
+ providerId : 'google.com' ,
373
+ uid : federatedUid ,
374
+ } ,
375
+ } ) ;
376
+
377
+ let providerUids = userRecord . providerData . map ( ( userInfo ) => userInfo . uid ) ;
378
+ let providerIds = userRecord . providerData . map ( ( userInfo ) => userInfo . providerId ) ;
379
+ expect ( providerUids ) . to . deep . include ( federatedUid ) ;
380
+ expect ( providerIds ) . to . deep . include ( 'google.com' ) ;
381
+
382
+ userRecord = await admin . auth ( ) . updateUser ( updateUser . uid , {
383
+ providersToDelete : [ 'google.com' ] ,
384
+ } ) ;
385
+
386
+ providerUids = userRecord . providerData . map ( ( userInfo ) => userInfo . uid ) ;
387
+ providerIds = userRecord . providerData . map ( ( userInfo ) => userInfo . providerId ) ;
388
+ expect ( providerUids ) . to . not . deep . include ( federatedUid ) ;
389
+ expect ( providerIds ) . to . not . deep . include ( 'google.com' ) ;
390
+ } ) ;
391
+
392
+ it ( 'can unlink multiple providers at once, incl a non-federated provider' , async ( ) => {
393
+ await deletePhoneNumberUser ( '+15555550001' ) ;
394
+
395
+ const googleFederatedUid = 'google_uid_' + generateRandomString ( 10 ) ;
396
+ const facebookFederatedUid = 'facebook_uid_' + generateRandomString ( 10 ) ;
397
+
398
+ let userRecord = await admin . auth ( ) . updateUser ( updateUser . uid , {
399
+ phoneNumber : '+15555550001' ,
400
+ providerToLink : {
401
+ providerId : 'google.com' ,
402
+ uid : googleFederatedUid ,
403
+ } ,
341
404
} ) ;
405
+ userRecord = await admin . auth ( ) . updateUser ( updateUser . uid , {
406
+ providerToLink : {
407
+ providerId : 'facebook.com' ,
408
+ uid : facebookFederatedUid ,
409
+ } ,
410
+ } ) ;
411
+
412
+ let providerUids = userRecord . providerData . map ( ( userInfo ) => userInfo . uid ) ;
413
+ let providerIds = userRecord . providerData . map ( ( userInfo ) => userInfo . providerId ) ;
414
+ expect ( providerUids ) . to . deep . include . members ( [ googleFederatedUid , facebookFederatedUid , '+15555550001' ] ) ;
415
+ expect ( providerIds ) . to . deep . include . members ( [ 'google.com' , 'facebook.com' , 'phone' ] ) ;
416
+
417
+ userRecord = await admin . auth ( ) . updateUser ( updateUser . uid , {
418
+ providersToDelete : [ 'google.com' , 'facebook.com' , 'phone' ] ,
419
+ } ) ;
420
+
421
+ providerUids = userRecord . providerData . map ( ( userInfo ) => userInfo . uid ) ;
422
+ providerIds = userRecord . providerData . map ( ( userInfo ) => userInfo . providerId ) ;
423
+ expect ( providerUids ) . to . not . deep . include . members ( [ googleFederatedUid , facebookFederatedUid , '+15555550001' ] ) ;
424
+ expect ( providerIds ) . to . not . deep . include . members ( [ 'google.com' , 'facebook.com' , 'phone' ] ) ;
425
+ } ) ;
342
426
} ) ;
343
427
344
428
it ( 'getUser() fails when called with a non-existing UID' , ( ) => {
@@ -1615,11 +1699,11 @@ function testImportAndSignInUser(
1615
1699
/**
1616
1700
* Helper function that deletes the user with the specified phone number
1617
1701
* if it exists.
1618
- * @param { string } phoneNumber The phone number of the user to delete.
1619
- * @return { Promise } A promise that resolves when the user is deleted
1702
+ * @param phoneNumber The phone number of the user to delete.
1703
+ * @return A promise that resolves when the user is deleted
1620
1704
* or is found not to exist.
1621
1705
*/
1622
- function deletePhoneNumberUser ( phoneNumber : string ) {
1706
+ function deletePhoneNumberUser ( phoneNumber : string ) : Promise < void > {
1623
1707
return admin . auth ( ) . getUserByPhoneNumber ( phoneNumber )
1624
1708
. then ( ( userRecord ) => {
1625
1709
return safeDelete ( userRecord . uid ) ;
0 commit comments