2020using System . Threading . Tasks ;
2121using FirebaseAdmin . Tests ;
2222using Google . Api . Gax ;
23- using Google . Api . Gax . Rest ;
2423using Google . Apis . Auth . OAuth2 ;
2524using Google . Apis . Json ;
2625using Newtonsoft . Json . Linq ;
@@ -318,7 +317,7 @@ public async Task GetUserByPhoneNumberEmpty()
318317 }
319318
320319 [ Fact ]
321- public void ListUsers ( )
320+ public async Task ListUsers ( )
322321 {
323322 var handler = new MockMessageHandler ( )
324323 {
@@ -328,9 +327,50 @@ public void ListUsers()
328327 var users = new List < ExportedUserRecord > ( ) ;
329328
330329 var pagedEnumerable = userManager . ListUsers ( null ) ;
331- foreach ( var user in pagedEnumerable . ToEnumerable ( ) )
330+ var enumerator = pagedEnumerable . GetEnumerator ( ) ;
331+ while ( await enumerator . MoveNext ( ) )
332+ {
333+ users . Add ( enumerator . Current ) ;
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 ListUsersForEach ( )
357+ {
358+ var handler = new MockMessageHandler ( )
359+ {
360+ Response = ListUsersResponse ,
361+ } ;
362+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
363+ var users = new List < ExportedUserRecord > ( ) ;
364+
365+ var pagedEnumerable = userManager . ListUsers ( null ) ;
366+ var enumerator = pagedEnumerable . ToEnumerable ( ) ;
367+ foreach ( var user in enumerator )
332368 {
333369 users . Add ( user ) ;
370+ if ( users . Count % 3 == 0 )
371+ {
372+ Assert . Equal ( users . Count / 3 , handler . Requests . Count ) ;
373+ }
334374 }
335375
336376 Assert . Equal ( 6 , users . Count ) ;
@@ -394,52 +434,65 @@ public void ListUsersCustomOptions()
394434 }
395435
396436 [ Fact ]
397- public async Task ListUsersPaged ( )
437+ public async Task ListUsersPage ( )
398438 {
399439 var handler = new MockMessageHandler ( )
400440 {
401- Response = ListUsersResponse ,
441+ Response = new List < string > ( )
442+ {
443+ ListUsersResponse [ 0 ] ,
444+ ListUsersResponse [ 0 ] ,
445+ } ,
402446 } ;
403447 var userManager = this . CreateFirebaseUserManager ( handler ) ;
404- var users = new List < ExportedUserRecord > ( ) ;
405- var tokens = new List < string > ( ) ;
406448
407- var pagedEnumerable = userManager . ListUsers ( new ListUsersOptions ( ) ) ;
408- for ( Page < ExportedUserRecord > userPage ; ( userPage = await pagedEnumerable . ReadPageAsync ( 3 ) ) != null ; )
449+ var pagedEnumerable = userManager . ListUsers ( null ) ;
450+ for ( int i = 0 ; i < 2 ; i ++ )
409451 {
410- tokens . Add ( userPage . NextPageToken ) ;
411- users . AddRange ( userPage ) ;
412- if ( userPage . NextPageToken == null )
413- {
414- break ;
415- }
452+ var userPage = await pagedEnumerable . ReadPageAsync ( 3 ) ;
453+
454+ Assert . Equal ( "token" , userPage . NextPageToken ) ;
455+ Assert . Equal ( 3 , userPage . Count ( ) ) ;
416456 }
417457
418- Assert . Equal ( 2 , tokens . Count ) ;
419- Assert . Equal ( "token" , tokens [ 0 ] ) ;
420- Assert . Null ( tokens [ 1 ] ) ;
458+ Assert . Equal ( 2 , handler . Requests . Count ) ;
459+ var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
460+ Assert . Single ( query ) ;
461+ Assert . Equal ( "3" , query [ "maxResults" ] ) ;
421462
422- Assert . Equal ( 6 , users . Count ) ;
423- Assert . Equal ( "user1" , users [ 0 ] . Uid ) ;
424- Assert . Equal ( "user2" , users [ 1 ] . Uid ) ;
425- Assert . Equal ( "user3" , users [ 2 ] . Uid ) ;
426- Assert . Equal ( "user4" , users [ 3 ] . Uid ) ;
427- Assert . Equal ( "user5" , users [ 4 ] . Uid ) ;
428- Assert . Equal ( "user6" , users [ 5 ] . Uid ) ;
463+ query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
464+ Assert . Single ( query ) ;
465+ Assert . Equal ( "3" , query [ "maxResults" ] ) ;
466+ }
467+
468+ [ Fact ]
469+ public async Task ListUsersPageMultipleCalls ( )
470+ {
471+ var handler = new MockMessageHandler ( )
472+ {
473+ Response = ListUsersResponse ,
474+ } ;
475+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
476+
477+ var pagedEnumerable = userManager . ListUsers ( null ) ;
478+ var userPage = await pagedEnumerable . ReadPageAsync ( 10 ) ;
479+
480+ Assert . Null ( userPage . NextPageToken ) ;
481+ Assert . Equal ( 6 , userPage . Count ( ) ) ;
429482
430483 Assert . Equal ( 2 , handler . Requests . Count ) ;
431484 var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
432485 Assert . Single ( query ) ;
433- Assert . Equal ( "3 " , query [ "maxResults" ] ) ;
486+ Assert . Equal ( "10 " , query [ "maxResults" ] ) ;
434487
435488 query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
436489 Assert . Equal ( 2 , query . Count ) ;
437- Assert . Equal ( "3 " , query [ "maxResults" ] ) ;
490+ Assert . Equal ( "7 " , query [ "maxResults" ] ) ;
438491 Assert . Equal ( "token" , query [ "nextPageToken" ] ) ;
439492 }
440493
441494 [ Fact ]
442- public void ListUsersAsRawResponses ( )
495+ public async Task ListUsersAsRawResponses ( )
443496 {
444497 var handler = new MockMessageHandler ( )
445498 {
@@ -450,11 +503,12 @@ public void ListUsersAsRawResponses()
450503 var tokens = new List < string > ( ) ;
451504
452505 var pagedEnumerable = userManager . ListUsers ( null ) ;
453- var responses = pagedEnumerable . AsRawResponses ( ) ;
454- foreach ( var records in responses . ToEnumerable ( ) )
506+ var responses = pagedEnumerable . AsRawResponses ( ) . GetEnumerator ( ) ;
507+ while ( await responses . MoveNext ( ) )
455508 {
456- users . AddRange ( records . Users ) ;
457- tokens . Add ( records . NextPageToken ) ;
509+ users . AddRange ( responses . Current . Users ) ;
510+ tokens . Add ( responses . Current . NextPageToken ) ;
511+ Assert . Equal ( tokens . Count , handler . Requests . Count ) ;
458512 }
459513
460514 Assert . Equal ( 2 , tokens . Count ) ;
@@ -561,24 +615,25 @@ public async Task ListUsersIntermittentHttpError()
561615 Response = ListUsersResponse ,
562616 } ;
563617 var userManager = this . CreateFirebaseUserManager ( handler ) ;
564- var users = new List < ExportedUserRecord > ( ) ;
565618
566619 var pagedEnumerable = userManager . ListUsers ( null ) ;
567- var page = await pagedEnumerable . ReadPageAsync ( 3 ) ;
568- Assert . Equal ( 3 , page . Count ( ) ) ;
620+ var enumerator = pagedEnumerable . GetEnumerator ( ) ;
621+ for ( int i = 0 ; i < 3 ; i ++ )
622+ {
623+ Assert . True ( await enumerator . MoveNext ( ) ) ;
624+ }
569625
570626 handler . StatusCode = HttpStatusCode . InternalServerError ;
571- await Assert . ThrowsAsync < FirebaseException > (
572- async ( ) => await pagedEnumerable . ReadPageAsync ( 3 ) ) ;
627+ await Assert . ThrowsAsync < FirebaseException > ( async ( ) => await enumerator . MoveNext ( ) ) ;
573628
574629 Assert . Equal ( 2 , handler . Requests . Count ) ;
575630 var query = this . ExtractQueryParams ( handler . Requests [ 0 ] ) ;
576631 Assert . Single ( query ) ;
577- Assert . Equal ( "3 " , query [ "maxResults" ] ) ;
632+ Assert . Equal ( "1000 " , query [ "maxResults" ] ) ;
578633
579634 query = this . ExtractQueryParams ( handler . Requests [ 1 ] ) ;
580635 Assert . Equal ( 2 , query . Count ) ;
581- Assert . Equal ( "3 " , query [ "maxResults" ] ) ;
636+ Assert . Equal ( "1000 " , query [ "maxResults" ] ) ;
582637 Assert . Equal ( "token" , query [ "nextPageToken" ] ) ;
583638 }
584639
0 commit comments