Skip to content

Commit d6798fa

Browse files
committed
More tests
1 parent 9e8cb6d commit d6798fa

File tree

5 files changed

+193
-113
lines changed

5 files changed

+193
-113
lines changed

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseUserManagerTest.cs

Lines changed: 94 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
using System.Threading.Tasks;
2121
using FirebaseAdmin.Tests;
2222
using Google.Api.Gax;
23-
using Google.Api.Gax.Rest;
2423
using Google.Apis.Auth.OAuth2;
2524
using Google.Apis.Json;
2625
using 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

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseUserManager.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,11 @@ internal async Task<UserRecord> GetUserByPhoneNumberAsync(
142142
internal PagedAsyncEnumerable<ExportedUserRecords, ExportedUserRecord> ListUsers(
143143
ListUsersOptions options)
144144
{
145-
var request = new ListUsersRequest(this.baseUrl, this.httpClient, options);
146-
return new RestPagedAsyncEnumerable<ListUsersRequest, ExportedUserRecords, ExportedUserRecord>(
147-
() => request, new ListUsersPageManager());
145+
var factory = new ListUsersRequest.Factory(this.baseUrl, this.httpClient, options);
146+
return new RestPagedAsyncEnumerable
147+
<ListUsersRequest, ExportedUserRecords, ExportedUserRecord>(
148+
() => factory.Create(),
149+
new ListUsersPageManager());
148150
}
149151

150152
/// <summary>

FirebaseAdmin/FirebaseAdmin/Auth/ListUsersOptions.cs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,22 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
using Google.Api.Gax;
16-
1715
namespace FirebaseAdmin.Auth
1816
{
1917
/// <summary>
20-
/// Options for <see cref="FirebaseAuth.ListUsersAsync(ListUsersOptions)"/> API.
18+
/// Options for the <see cref="FirebaseAuth.ListUsersAsync(ListUsersOptions)"/> API.
2119
/// </summary>
2220
public sealed class ListUsersOptions
2321
{
2422
/// <summary>
25-
/// Initializes a new instance of the <see cref="ListUsersOptions"/> class.
26-
/// </summary>
27-
public ListUsersOptions() { }
28-
29-
internal ListUsersOptions(ListUsersOptions source)
30-
{
31-
this.PageSize = source?.PageSize;
32-
this.PageToken = source?.PageToken;
33-
}
34-
35-
/// <summary>
36-
/// Gets or sets the number of results to return per page. This modifies the per-request page size.
37-
/// It does not affect the total number of results returned. Must not exceed 1000.
23+
/// Gets or sets the number of results to fetch in a single API call. This does not affect
24+
/// the total number of results returned. Must not exceed 1000.
3825
/// </summary>
3926
public int? PageSize { get; set; }
4027

4128
/// <summary>
42-
/// Gets or sets the page token. If set, this token is used to indicate a continued list operation.
29+
/// Gets or sets the page token. If set, this token is used to indicate a continued list
30+
/// operation.
4331
/// </summary>
4432
public string PageToken { get; set; }
4533
}

FirebaseAdmin/FirebaseAdmin/Auth/ListUsersPageManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ namespace FirebaseAdmin.Auth
2020
/// <summary>
2121
/// Utility for paging through user accounts in the Google API client.
2222
/// </summary>
23-
internal class ListUsersPageManager : IPageManager<ListUsersRequest, ExportedUserRecords, ExportedUserRecord>
23+
internal sealed class ListUsersPageManager
24+
: IPageManager<ListUsersRequest, ExportedUserRecords, ExportedUserRecord>
2425
{
2526
public void SetPageSize(ListUsersRequest request, int pageSize)
2627
{

0 commit comments

Comments
 (0)