Skip to content

Commit 386ddeb

Browse files
committed
Added more tests; Updated docs
1 parent d6798fa commit 386ddeb

File tree

3 files changed

+88
-42
lines changed

3 files changed

+88
-42
lines changed

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseUserManagerTest.cs

Lines changed: 79 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -331,15 +331,17 @@ public async Task ListUsers()
331331
while (await enumerator.MoveNext())
332332
{
333333
users.Add(enumerator.Current);
334+
if (users.Count % 3 == 0)
335+
{
336+
Assert.Equal(users.Count / 3, handler.Requests.Count);
337+
}
334338
}
335339

336340
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);
341+
for (int i = 0; i < 6; i++)
342+
{
343+
Assert.Equal($"user{i + 1}", users[i].Uid);
344+
}
343345

344346
Assert.Equal(2, handler.Requests.Count);
345347
var query = this.ExtractQueryParams(handler.Requests[0]);
@@ -363,8 +365,7 @@ public void ListUsersForEach()
363365
var users = new List<ExportedUserRecord>();
364366

365367
var pagedEnumerable = userManager.ListUsers(null);
366-
var enumerator = pagedEnumerable.ToEnumerable();
367-
foreach (var user in enumerator)
368+
foreach (var user in pagedEnumerable.ToEnumerable())
368369
{
369370
users.Add(user);
370371
if (users.Count % 3 == 0)
@@ -374,12 +375,10 @@ public void ListUsersForEach()
374375
}
375376

376377
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);
378+
for (int i = 0; i < 6; i++)
379+
{
380+
Assert.Equal($"user{i + 1}", users[i].Uid);
381+
}
383382

384383
Assert.Equal(2, handler.Requests.Count);
385384
var query = this.ExtractQueryParams(handler.Requests[0]);
@@ -414,12 +413,10 @@ public void ListUsersCustomOptions()
414413
}
415414

416415
Assert.Equal(6, users.Count);
417-
Assert.Equal("user1", users[0].Uid);
418-
Assert.Equal("user2", users[1].Uid);
419-
Assert.Equal("user3", users[2].Uid);
420-
Assert.Equal("user4", users[3].Uid);
421-
Assert.Equal("user5", users[4].Uid);
422-
Assert.Equal("user6", users[5].Uid);
416+
for (int i = 0; i < 6; i++)
417+
{
418+
Assert.Equal($"user{i + 1}", users[i].Uid);
419+
}
423420

424421
Assert.Equal(2, handler.Requests.Count);
425422
var query = this.ExtractQueryParams(handler.Requests[0]);
@@ -434,7 +431,7 @@ public void ListUsersCustomOptions()
434431
}
435432

436433
[Fact]
437-
public async Task ListUsersPage()
434+
public async Task ListUsersReadPage()
438435
{
439436
var handler = new MockMessageHandler()
440437
{
@@ -446,27 +443,75 @@ public async Task ListUsersPage()
446443
};
447444
var userManager = this.CreateFirebaseUserManager(handler);
448445

446+
// Retrieve a page of users.
449447
var pagedEnumerable = userManager.ListUsers(null);
450-
for (int i = 0; i < 2; i++)
451-
{
452-
var userPage = await pagedEnumerable.ReadPageAsync(3);
448+
var userPage = await pagedEnumerable.ReadPageAsync(3);
453449

454-
Assert.Equal("token", userPage.NextPageToken);
455-
Assert.Equal(3, userPage.Count());
456-
}
450+
Assert.Equal("token", userPage.NextPageToken);
451+
Assert.Equal(3, userPage.Count());
452+
Assert.Equal(1, handler.Requests.Count);
453+
var query = this.ExtractQueryParams(handler.Requests[0]);
454+
Assert.Single(query);
455+
Assert.Equal("3", query["maxResults"]);
457456

457+
// Retrieve the same page of users again.
458+
userPage = await pagedEnumerable.ReadPageAsync(3);
459+
460+
Assert.Equal("token", userPage.NextPageToken);
461+
Assert.Equal(3, userPage.Count());
458462
Assert.Equal(2, handler.Requests.Count);
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 ListUsersByPages()
470+
{
471+
var handler = new MockMessageHandler()
472+
{
473+
Response = ListUsersResponse,
474+
};
475+
var userManager = this.CreateFirebaseUserManager(handler);
476+
var users = new List<ExportedUserRecord>();
477+
478+
// Read page 1.
479+
var pagedEnumerable = userManager.ListUsers(null);
480+
var userPage = await pagedEnumerable.ReadPageAsync(3);
481+
482+
Assert.Equal(3, userPage.Count());
483+
Assert.Equal("token", userPage.NextPageToken);
484+
Assert.Single(handler.Requests);
459485
var query = this.ExtractQueryParams(handler.Requests[0]);
460486
Assert.Single(query);
461487
Assert.Equal("3", query["maxResults"]);
488+
users.AddRange(userPage);
489+
490+
// Read page 2.
491+
pagedEnumerable = userManager.ListUsers(new ListUsersOptions()
492+
{
493+
PageToken = userPage.NextPageToken,
494+
});
495+
userPage = await pagedEnumerable.ReadPageAsync(3);
462496

497+
Assert.Equal(3, userPage.Count());
498+
Assert.Null(userPage.NextPageToken);
499+
Assert.Equal(2, handler.Requests.Count);
463500
query = this.ExtractQueryParams(handler.Requests[1]);
464-
Assert.Single(query);
501+
Assert.Equal(2, query.Count);
465502
Assert.Equal("3", query["maxResults"]);
503+
Assert.Equal("token", query["nextPageToken"]);
504+
users.AddRange(userPage);
505+
506+
Assert.Equal(6, users.Count);
507+
for (int i = 0; i < 6; i++)
508+
{
509+
Assert.Equal($"user{i + 1}", users[i].Uid);
510+
}
466511
}
467512

468513
[Fact]
469-
public async Task ListUsersPageMultipleCalls()
514+
public async Task ListUsersReadLargePageSize()
470515
{
471516
var handler = new MockMessageHandler()
472517
{
@@ -479,7 +524,6 @@ public async Task ListUsersPageMultipleCalls()
479524

480525
Assert.Null(userPage.NextPageToken);
481526
Assert.Equal(6, userPage.Count());
482-
483527
Assert.Equal(2, handler.Requests.Count);
484528
var query = this.ExtractQueryParams(handler.Requests[0]);
485529
Assert.Single(query);
@@ -516,12 +560,10 @@ public async Task ListUsersAsRawResponses()
516560
Assert.Null(tokens[1]);
517561

518562
Assert.Equal(6, users.Count);
519-
Assert.Equal("user1", users[0].Uid);
520-
Assert.Equal("user2", users[1].Uid);
521-
Assert.Equal("user3", users[2].Uid);
522-
Assert.Equal("user4", users[3].Uid);
523-
Assert.Equal("user5", users[4].Uid);
524-
Assert.Equal("user6", users[5].Uid);
563+
for (int i = 0; i < 6; i++)
564+
{
565+
Assert.Equal($"user{i + 1}", users[i].Uid);
566+
}
525567

526568
Assert.Equal(2, handler.Requests.Count);
527569
var query = this.ExtractQueryParams(handler.Requests[0]);
@@ -573,7 +615,7 @@ public void ListUsersPageSizeTooSmall()
573615
}
574616

575617
[Fact]
576-
public void ListUsersStartingPageTokenEmpty()
618+
public void ListUsersPageTokenEmpty()
577619
{
578620
var handler = new MockMessageHandler()
579621
{

FirebaseAdmin/FirebaseAdmin/Auth/ListUsersPageManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
namespace FirebaseAdmin.Auth
1919
{
2020
/// <summary>
21-
/// Utility for paging through user accounts in the Google API client.
21+
/// Utility for paging through user accounts using the Google API client.
2222
/// </summary>
2323
internal sealed class ListUsersPageManager
2424
: IPageManager<ListUsersRequest, ExportedUserRecords, ExportedUserRecord>

FirebaseAdmin/FirebaseAdmin/Auth/ListUsersRequest.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ internal sealed class ListUsersRequest : IClientServiceRequest<ExportedUserRecor
3838
private readonly HttpClient httpClient;
3939

4040
private ListUsersRequest(
41-
string baseUrl, HttpClient httpClient, ListUsersOptions options = null)
41+
string baseUrl, HttpClient httpClient, ListUsersOptions options)
4242
{
4343
this.baseUrl = baseUrl;
4444
this.httpClient = httpClient;
4545
this.RequestParameters = new Dictionary<string, IParameter>();
46-
this.SetPageSize(options?.PageSize ?? MaxListUsersResults);
47-
var pageToken = options?.PageToken;
46+
this.SetPageSize(options.PageSize ?? MaxListUsersResults);
47+
var pageToken = options.PageToken;
4848
if (pageToken != null)
4949
{
5050
this.SetPageToken(pageToken);
@@ -200,6 +200,10 @@ private async Task<HttpResponseMessage> SendAsync(
200200
.ConfigureAwait(false);
201201
}
202202

203+
/// <summary>
204+
/// Factory class that validates arguments, and then creates new instances of the
205+
/// <see cref="ListUsersRequest"/> class.
206+
/// </summary>
203207
internal class Factory
204208
{
205209
private readonly string baseUrl;
@@ -223,7 +227,7 @@ internal Factory(
223227
}
224228
else if (this.options.PageSize <= 0)
225229
{
226-
throw new ArgumentException("Page size must be a positive integer.");
230+
throw new ArgumentException("Page size must be positive.");
227231
}
228232
else if (this.options.PageToken == string.Empty)
229233
{

0 commit comments

Comments
 (0)