@@ -317,6 +317,82 @@ public async Task GetUserByPhoneNumberEmpty()
317317 await Assert . ThrowsAsync < ArgumentException > ( ( ) => userManager . GetUserByPhoneNumberAsync ( string . Empty ) ) ;
318318 }
319319
320+ [ Fact ]
321+ public void ListUsers ( )
322+ {
323+ var handler = new MockMessageHandler ( )
324+ {
325+ Response = ListUsersResponse ,
326+ } ;
327+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
328+ var users = new List < ExportedUserRecord > ( ) ;
329+
330+ var pagedEnumerable = userManager . ListUsers ( null ) ;
331+ foreach ( var user in pagedEnumerable . ToEnumerable ( ) )
332+ {
333+ users . Add ( user ) ;
334+ }
335+
336+ Assert . Equal ( 6 , users . Count ) ;
337+ Assert . Equal ( "user1" , users [ 0 ] . Uid ) ;
338+ Assert . Equal ( "user2" , users [ 1 ] . Uid ) ;
339+ Assert . Equal ( "user3" , users [ 2 ] . Uid ) ;
340+ Assert . Equal ( "user4" , users [ 3 ] . Uid ) ;
341+ Assert . Equal ( "user5" , users [ 4 ] . Uid ) ;
342+ Assert . Equal ( "user6" , users [ 5 ] . Uid ) ;
343+
344+ Assert . Equal ( 2 , handler . Requests . Count ) ;
345+ var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
346+ Assert . Single ( query ) ;
347+ Assert . Equal ( "1000" , query [ "maxResults" ] ) ;
348+
349+ query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
350+ Assert . Equal ( 2 , query . Count ) ;
351+ Assert . Equal ( "1000" , query [ "maxResults" ] ) ;
352+ Assert . Equal ( "token" , query [ "nextPageToken" ] ) ;
353+ }
354+
355+ [ Fact ]
356+ public void ListUsersCustomOptions ( )
357+ {
358+ var handler = new MockMessageHandler ( )
359+ {
360+ Response = ListUsersResponse ,
361+ } ;
362+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
363+ var users = new List < ExportedUserRecord > ( ) ;
364+ var customOptions = new ListUsersOptions ( )
365+ {
366+ PageSize = 3 ,
367+ PageToken = "custom-token" ,
368+ } ;
369+
370+ var pagedEnumerable = userManager . ListUsers ( customOptions ) ;
371+ foreach ( var user in pagedEnumerable . ToEnumerable ( ) )
372+ {
373+ users . Add ( user ) ;
374+ }
375+
376+ Assert . Equal ( 6 , users . Count ) ;
377+ Assert . Equal ( "user1" , users [ 0 ] . Uid ) ;
378+ Assert . Equal ( "user2" , users [ 1 ] . Uid ) ;
379+ Assert . Equal ( "user3" , users [ 2 ] . Uid ) ;
380+ Assert . Equal ( "user4" , users [ 3 ] . Uid ) ;
381+ Assert . Equal ( "user5" , users [ 4 ] . Uid ) ;
382+ Assert . Equal ( "user6" , users [ 5 ] . Uid ) ;
383+
384+ Assert . Equal ( 2 , handler . Requests . Count ) ;
385+ var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
386+ Assert . Equal ( 2 , query . Count ) ;
387+ Assert . Equal ( "3" , query [ "maxResults" ] ) ;
388+ Assert . Equal ( "custom-token" , query [ "nextPageToken" ] ) ;
389+
390+ query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
391+ Assert . Equal ( 2 , query . Count ) ;
392+ Assert . Equal ( "3" , query [ "maxResults" ] ) ;
393+ Assert . Equal ( "token" , query [ "nextPageToken" ] ) ;
394+ }
395+
320396 [ Fact ]
321397 public async Task ListUsersPaged ( )
322398 {
@@ -327,12 +403,10 @@ public async Task ListUsersPaged()
327403 var userManager = this . CreateFirebaseUserManager ( handler ) ;
328404 var users = new List < ExportedUserRecord > ( ) ;
329405 var tokens = new List < string > ( ) ;
330- var pageCounter = 0 ;
331406
332407 var pagedEnumerable = userManager . ListUsers ( new ListUsersOptions ( ) ) ;
333408 for ( Page < ExportedUserRecord > userPage ; ( userPage = await pagedEnumerable . ReadPageAsync ( 3 ) ) != null ; )
334409 {
335- pageCounter ++ ;
336410 tokens . Add ( userPage . NextPageToken ) ;
337411 users . AddRange ( userPage ) ;
338412 if ( userPage . NextPageToken == null )
@@ -341,10 +415,11 @@ public async Task ListUsersPaged()
341415 }
342416 }
343417
344- Assert . Equal ( 2 , pageCounter ) ;
345- Assert . Equal ( 6 , users . Count ) ;
418+ Assert . Equal ( 2 , tokens . Count ) ;
346419 Assert . Equal ( "token" , tokens [ 0 ] ) ;
347420 Assert . Null ( tokens [ 1 ] ) ;
421+
422+ Assert . Equal ( 6 , users . Count ) ;
348423 Assert . Equal ( "user1" , users [ 0 ] . Uid ) ;
349424 Assert . Equal ( "user2" , users [ 1 ] . Uid ) ;
350425 Assert . Equal ( "user3" , users [ 2 ] . Uid ) ;
@@ -364,21 +439,28 @@ public async Task ListUsersPaged()
364439 }
365440
366441 [ Fact ]
367- public void ListUsersByEntries ( )
442+ public void ListUsersAsRawResponses ( )
368443 {
369444 var handler = new MockMessageHandler ( )
370445 {
371446 Response = ListUsersResponse ,
372447 } ;
373448 var userManager = this . CreateFirebaseUserManager ( handler ) ;
374449 var users = new List < ExportedUserRecord > ( ) ;
450+ var tokens = new List < string > ( ) ;
375451
376452 var pagedEnumerable = userManager . ListUsers ( null ) ;
377- foreach ( var user in pagedEnumerable . ToEnumerable ( ) )
453+ var responses = pagedEnumerable . AsRawResponses ( ) ;
454+ foreach ( var records in responses . ToEnumerable ( ) )
378455 {
379- users . Add ( user ) ;
456+ users . AddRange ( records . Users ) ;
457+ tokens . Add ( records . NextPageToken ) ;
380458 }
381459
460+ Assert . Equal ( 2 , tokens . Count ) ;
461+ Assert . Equal ( "token" , tokens [ 0 ] ) ;
462+ Assert . Null ( tokens [ 1 ] ) ;
463+
382464 Assert . Equal ( 6 , users . Count ) ;
383465 Assert . Equal ( "user1" , users [ 0 ] . Uid ) ;
384466 Assert . Equal ( "user2" , users [ 1 ] . Uid ) ;
@@ -416,24 +498,28 @@ public void ListUsersPageSizeTooLarge()
416498 }
417499
418500 [ Fact ]
419- public void ListUsersPageSizeZero ( )
501+ public void ListUsersPageSizeTooSmall ( )
420502 {
421503 var handler = new MockMessageHandler ( )
422504 {
423505 Response = ListUsersResponse ,
424506 } ;
425507 var userManager = this . CreateFirebaseUserManager ( handler ) ;
426- var options = new ListUsersOptions ( )
508+
509+ foreach ( var pageSize in new int [ ] { 0 , - 1 } )
427510 {
428- PageSize = 0 ,
429- } ;
511+ var options = new ListUsersOptions ( )
512+ {
513+ PageSize = pageSize ,
514+ } ;
430515
431- Assert . Throws < ArgumentException > ( ( ) => userManager . ListUsers ( options ) ) ;
432- Assert . Empty ( handler . Requests ) ;
516+ Assert . Throws < ArgumentException > ( ( ) => userManager . ListUsers ( options ) ) ;
517+ Assert . Empty ( handler . Requests ) ;
518+ }
433519 }
434520
435521 [ Fact ]
436- public void ListUsersPageSizeNegative ( )
522+ public void ListUsersStartingPageTokenEmpty ( )
437523 {
438524 var handler = new MockMessageHandler ( )
439525 {
@@ -442,114 +528,58 @@ public void ListUsersPageSizeNegative()
442528 var userManager = this . CreateFirebaseUserManager ( handler ) ;
443529 var options = new ListUsersOptions ( )
444530 {
445- PageSize = - 1 ,
531+ PageToken = string . Empty ,
446532 } ;
447533
448534 Assert . Throws < ArgumentException > ( ( ) => userManager . ListUsers ( options ) ) ;
449535 Assert . Empty ( handler . Requests ) ;
450536 }
451537
452538 [ Fact ]
453- public void ListUsersAsRawResponses ( )
539+ public async Task ListUsersHttpError ( )
454540 {
455541 var handler = new MockMessageHandler ( )
456542 {
457- Response = ListUsersResponse ,
543+ StatusCode = HttpStatusCode . InternalServerError ,
458544 } ;
459545 var userManager = this . CreateFirebaseUserManager ( handler ) ;
460- var users = new List < ExportedUserRecord > ( ) ;
461546
462547 var pagedEnumerable = userManager . ListUsers ( null ) ;
463- var responses = pagedEnumerable . AsRawResponses ( ) ;
464- foreach ( var records in responses . ToEnumerable ( ) )
465- {
466- users . AddRange ( records . Users ) ;
467- }
548+ await Assert . ThrowsAsync < FirebaseException > ( async ( ) => await pagedEnumerable . First ( ) ) ;
468549
469- Assert . Equal ( 6 , users . Count ) ;
470- Assert . Equal ( "user1" , users [ 0 ] . Uid ) ;
471- Assert . Equal ( "user2" , users [ 1 ] . Uid ) ;
472- Assert . Equal ( "user3" , users [ 2 ] . Uid ) ;
473- Assert . Equal ( "user4" , users [ 3 ] . Uid ) ;
474- Assert . Equal ( "user5" , users [ 4 ] . Uid ) ;
475- Assert . Equal ( "user6" , users [ 5 ] . Uid ) ;
476-
477- Assert . Equal ( 2 , handler . Requests . Count ) ;
550+ Assert . Single ( handler . Requests ) ;
478551 var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
479552 Assert . Single ( query ) ;
480553 Assert . Equal ( "1000" , query [ "maxResults" ] ) ;
481-
482- query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
483- Assert . Equal ( 2 , query . Count ) ;
484- Assert . Equal ( "1000" , query [ "maxResults" ] ) ;
485- Assert . Equal ( "token" , query [ "nextPageToken" ] ) ;
486554 }
487555
488556 [ Fact ]
489- public async Task ListUsers ( )
557+ public async Task ListUsersIntermittentHttpError ( )
490558 {
491- var nextPageToken = Guid . NewGuid ( ) . ToString ( ) ;
492559 var handler = new MockMessageHandler ( )
493560 {
494- Response = new DownloadAccountResponse ( )
495- {
496- NextPageToken = nextPageToken ,
497- Users = new List < GetAccountInfoResponse . User > ( )
498- {
499- new GetAccountInfoResponse . User ( ) { UserId = "user1" } ,
500- new GetAccountInfoResponse . User ( ) { UserId = "user2" } ,
501- new GetAccountInfoResponse . User ( ) { UserId = "user3" } ,
502- } ,
503- } ,
561+ Response = ListUsersResponse ,
504562 } ;
505563 var userManager = this . CreateFirebaseUserManager ( handler ) ;
564+ var users = new List < ExportedUserRecord > ( ) ;
506565
507- var pagedEnumerable = userManager . ListUsers ( new ListUsersOptions ( ) ) ;
508- var usersPage = await pagedEnumerable . ReadPageAsync ( 3 ) ;
566+ var pagedEnumerable = userManager . ListUsers ( null ) ;
567+ var page = await pagedEnumerable . ReadPageAsync ( 3 ) ;
568+ Assert . Equal ( 3 , page . Count ( ) ) ;
509569
510- var userRecords = usersPage . ToList ( ) ;
511- Assert . Equal ( nextPageToken , usersPage . NextPageToken ) ;
512- Assert . Equal ( 3 , userRecords . Count ) ;
513- Assert . Equal ( "user1" , userRecords [ 0 ] . Uid ) ;
514- Assert . Equal ( "user2" , userRecords [ 1 ] . Uid ) ;
515- Assert . Equal ( "user3" , userRecords [ 2 ] . Uid ) ;
570+ handler . StatusCode = HttpStatusCode . InternalServerError ;
571+ await Assert . ThrowsAsync < FirebaseException > (
572+ async ( ) => await pagedEnumerable . ReadPageAsync ( 3 ) ) ;
516573
517- Assert . Single ( handler . Requests ) ;
574+ Assert . Equal ( 2 , handler . Requests . Count ) ;
518575 var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
519576 Assert . Single ( query ) ;
520577 Assert . Equal ( "3" , query [ "maxResults" ] ) ;
521- }
522-
523- [ Fact ]
524- public void ListUsersMaxDefault ( )
525- {
526- var nextPageToken = Guid . NewGuid ( ) . ToString ( ) ;
527- var handler = new MockMessageHandler ( )
528- {
529- Response = new DownloadAccountResponse ( )
530- {
531- Users = new List < GetAccountInfoResponse . User > ( )
532- {
533- new GetAccountInfoResponse . User ( ) { UserId = "user1" } ,
534- new GetAccountInfoResponse . User ( ) { UserId = "user2" } ,
535- new GetAccountInfoResponse . User ( ) { UserId = "user3" } ,
536- } ,
537- } ,
538- } ;
539- var userManager = this . CreateFirebaseUserManager ( handler ) ;
540-
541- var pagedEnumerable = userManager . ListUsers ( new ListUsersOptions ( ) ) ;
542- var userRecords = pagedEnumerable . ToEnumerable ( ) . ToList ( ) ;
543578
544- Assert . Equal ( 3 , userRecords . Count ) ;
545- Assert . Equal ( "user1" , userRecords [ 0 ] . Uid ) ;
546- Assert . Equal ( "user2" , userRecords [ 1 ] . Uid ) ;
547- Assert . Equal ( "user3" , userRecords [ 2 ] . Uid ) ;
548- Assert . Single ( handler . Requests ) ;
549-
550- var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
551- Assert . Single ( query ) ;
552- Assert . Equal ( "1000" , query [ "maxResults" ] ) ;
579+ query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
580+ Assert . Equal ( 2 , query . Count ) ;
581+ Assert . Equal ( "3" , query [ "maxResults" ] ) ;
582+ Assert . Equal ( "token" , query [ "nextPageToken" ] ) ;
553583 }
554584
555585 [ Fact ]
0 commit comments