Skip to content

Commit 7057368

Browse files
pavelprystinkaannelo-msft
authored andcommitted
[Communication] - PhoneNumberAdministrationClient - fix next page (Azure#17283)
Fix communication admin Pageable results issue not pulling next page
1 parent facb30b commit 7057368

File tree

6 files changed

+3168
-428
lines changed

6 files changed

+3168
-428
lines changed

sdk/communication/Azure.Communication.Administration/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## 1.0.0-beta.4 (Unreleased)
44

5+
### Fixed
6+
- Issue with paging results not pulling next pages
7+
58

69
## 1.0.0-beta.3 (2020-11-16)
710

@@ -40,6 +43,7 @@
4043
- Replaced `ReleasePhoneNumbersAsync` with `StartReleasePhoneNumbersAsync` which returns a poller for the long-running operation.
4144
- Replaced `ReleasePhoneNumbers` with `StartReleasePhoneNumbers` which is a long-running operation.
4245

46+
4347
## 1.0.0-beta.2 (2020-10-06)
4448
Added phone number administration. For more information, please see the [README][read_me] and [documentation][documentation].
4549

sdk/communication/Azure.Communication.Administration/src/PhoneNumberAdministrationClient.cs

Lines changed: 83 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,13 @@ public virtual AsyncPageable<AcquiredPhoneNumber> GetAllPhoneNumbersAsync(string
6565

6666
try
6767
{
68-
return PageResponseEnumerator.CreateAsyncEnumerable(async s =>
68+
return PageResponseEnumerator.CreateAsyncEnumerable(async nextLink =>
6969
{
70-
Response<AcquiredPhoneNumbers> response = await RestClient.GetAllPhoneNumbersAsync(locale, skip: null, take: null, cancellationToken).ConfigureAwait(false);
71-
return Page.FromValues(response.Value.PhoneNumbers, continuationToken: null!, response.GetRawResponse());
70+
Response<AcquiredPhoneNumbers> response = nextLink is null
71+
? await RestClient.GetAllPhoneNumbersAsync(locale, skip: null, take: null, cancellationToken).ConfigureAwait(false)
72+
: await RestClient.GetAllPhoneNumbersNextPageAsync(nextLink, locale, skip: null, take: null, cancellationToken).ConfigureAwait(false);
73+
74+
return Page.FromValues(response.Value.PhoneNumbers, response.Value.NextLink, response.GetRawResponse());
7275
});
7376
}
7477
catch (Exception ex)
@@ -89,8 +92,14 @@ public virtual Pageable<AcquiredPhoneNumber> GetAllPhoneNumbers(string? locale =
8992

9093
try
9194
{
92-
Response<AcquiredPhoneNumbers> response = RestClient.GetAllPhoneNumbers(locale, skip: null, take: null, cancellationToken);
93-
return PageResponseEnumerator.CreateEnumerable(s => Page.FromValues(response.Value.PhoneNumbers, continuationToken: null!, response.GetRawResponse()));
95+
return PageResponseEnumerator.CreateEnumerable(nextLink =>
96+
{
97+
Response<AcquiredPhoneNumbers> response = nextLink is null
98+
? RestClient.GetAllPhoneNumbers(locale, skip: null, take: null, cancellationToken)
99+
: RestClient.GetAllPhoneNumbersNextPage(nextLink, locale, skip: null, take: null, cancellationToken);
100+
101+
return Page.FromValues(response.Value.PhoneNumbers, response.Value.NextLink, response.GetRawResponse());
102+
});
94103
}
95104
catch (Exception ex)
96105
{
@@ -229,10 +238,13 @@ public virtual AsyncPageable<PhoneNumberCountry> GetAllSupportedCountriesAsync(s
229238
scope.Start();
230239
try
231240
{
232-
return PageResponseEnumerator.CreateAsyncEnumerable(async s =>
241+
return PageResponseEnumerator.CreateAsyncEnumerable(async nextLink =>
233242
{
234-
Response<PhoneNumberCountries> response = await RestClient.GetAllSupportedCountriesAsync(locale, skip: null, take: null, cancellationToken).ConfigureAwait(false);
235-
return Page.FromValues(response.Value.Countries, continuationToken: null!, response.GetRawResponse());
243+
Response<PhoneNumberCountries> response = nextLink is null
244+
? await RestClient.GetAllSupportedCountriesAsync(locale, skip: null, take: null, cancellationToken).ConfigureAwait(false)
245+
: await RestClient.GetAllSupportedCountriesNextPageAsync(nextLink, locale, skip: null, take: null, cancellationToken).ConfigureAwait(false);
246+
247+
return Page.FromValues(response.Value.Countries, response.Value.NextLink, response.GetRawResponse());
236248
});
237249
}
238250
catch (Exception ex)
@@ -252,8 +264,14 @@ public virtual Pageable<PhoneNumberCountry> GetAllSupportedCountries(string? loc
252264
scope.Start();
253265
try
254266
{
255-
Response<PhoneNumberCountries> response = RestClient.GetAllSupportedCountries(locale, skip: null, take: null, cancellationToken);
256-
return PageResponseEnumerator.CreateEnumerable(s => Page.FromValues(response.Value.Countries, continuationToken: null!, response.GetRawResponse()));
267+
return PageResponseEnumerator.CreateEnumerable(nextLink =>
268+
{
269+
Response<PhoneNumberCountries> response = nextLink is null
270+
? RestClient.GetAllSupportedCountries(locale, skip: null, take: null, cancellationToken)
271+
: RestClient.GetAllSupportedCountriesNextPage(nextLink, locale, skip: null, take: null, cancellationToken);
272+
273+
return Page.FromValues(response.Value.Countries, response.Value.NextLink, response.GetRawResponse());
274+
});
257275
}
258276
catch (Exception ex)
259277
{
@@ -390,10 +408,13 @@ public virtual AsyncPageable<PhonePlanGroup> GetPhonePlanGroupsAsync(string coun
390408
scope.Start();
391409
try
392410
{
393-
return PageResponseEnumerator.CreateAsyncEnumerable(async s =>
411+
return PageResponseEnumerator.CreateAsyncEnumerable(async nextLink =>
394412
{
395-
Response<PhonePlanGroups> response = await RestClient.GetPhonePlanGroupsAsync(countryCode, locale, includeRateInformation, skip: null, take: null, cancellationToken).ConfigureAwait(false);
396-
return Page.FromValues(response.Value.PhonePlanGroupsValue, continuationToken: null!, response.GetRawResponse());
413+
Response<PhonePlanGroups> response = nextLink is null
414+
? await RestClient.GetPhonePlanGroupsAsync(countryCode, locale, includeRateInformation, skip: null, take: null, cancellationToken).ConfigureAwait(false)
415+
: await RestClient.GetPhonePlanGroupsNextPageAsync(nextLink, countryCode, locale, includeRateInformation, skip: null, take: null, cancellationToken).ConfigureAwait(false);
416+
417+
return Page.FromValues(response.Value.PhonePlanGroupsValue, response.Value.NextLink, response.GetRawResponse());
397418
});
398419
}
399420
catch (Exception ex)
@@ -415,8 +436,14 @@ public virtual Pageable<PhonePlanGroup> GetPhonePlanGroups(string countryCode, s
415436
scope.Start();
416437
try
417438
{
418-
Response<PhonePlanGroups> response = RestClient.GetPhonePlanGroups(countryCode, locale, includeRateInformation, skip: null, take: null, cancellationToken);
419-
return PageResponseEnumerator.CreateEnumerable(s => Page.FromValues(response.Value.PhonePlanGroupsValue, continuationToken: null!, response.GetRawResponse()));
439+
return PageResponseEnumerator.CreateEnumerable(nextLink =>
440+
{
441+
Response<PhonePlanGroups> response = nextLink is null
442+
? RestClient.GetPhonePlanGroups(countryCode, locale, includeRateInformation, skip: null, take: null, cancellationToken)
443+
: RestClient.GetPhonePlanGroupsNextPage(nextLink, countryCode, locale, includeRateInformation, skip: null, take: null, cancellationToken);
444+
445+
return Page.FromValues(response.Value.PhonePlanGroupsValue, response.Value.NextLink, response.GetRawResponse());
446+
});
420447
}
421448
catch (Exception ex)
422449
{
@@ -437,10 +464,13 @@ public virtual AsyncPageable<PhonePlan> GetPhonePlansAsync(string countryCode, s
437464
scope.Start();
438465
try
439466
{
440-
return PageResponseEnumerator.CreateAsyncEnumerable(async s =>
467+
return PageResponseEnumerator.CreateAsyncEnumerable(async nextLink =>
441468
{
442-
Response<PhonePlansResponse> response = await RestClient.GetPhonePlansAsync(countryCode, phonePlanGroupId, locale, skip: null, take: null, cancellationToken).ConfigureAwait(false);
443-
return Page.FromValues(response.Value.PhonePlans, continuationToken: null!, response.GetRawResponse());
469+
Response<PhonePlansResponse> response = nextLink is null
470+
? await RestClient.GetPhonePlansAsync(countryCode, phonePlanGroupId, locale, skip: null, take: null, cancellationToken).ConfigureAwait(false)
471+
: await RestClient.GetPhonePlansNextPageAsync(nextLink, countryCode, phonePlanGroupId, locale, skip: null, take: null, cancellationToken).ConfigureAwait(false);
472+
473+
return Page.FromValues(response.Value.PhonePlans, response.Value.NextLink, response.GetRawResponse());
444474
});
445475
}
446476
catch (Exception ex)
@@ -462,8 +492,14 @@ public virtual Pageable<PhonePlan> GetPhonePlans(string countryCode, string phon
462492
scope.Start();
463493
try
464494
{
465-
Response<PhonePlansResponse> response = RestClient.GetPhonePlans(countryCode, phonePlanGroupId, locale, skip: null, take: null, cancellationToken);
466-
return PageResponseEnumerator.CreateEnumerable(s => Page.FromValues(response.Value.PhonePlans, continuationToken: null!, response.GetRawResponse()));
495+
return PageResponseEnumerator.CreateEnumerable(nextLink =>
496+
{
497+
Response<PhonePlansResponse> response = nextLink is null
498+
? RestClient.GetPhonePlans(countryCode, phonePlanGroupId, locale, skip: null, take: null, cancellationToken)
499+
: RestClient.GetPhonePlansNextPage(nextLink, countryCode, phonePlanGroupId, locale, skip: null, take: null, cancellationToken);
500+
501+
return Page.FromValues(response.Value.PhonePlans, response.Value.NextLink, response.GetRawResponse());
502+
});
467503
}
468504
catch (Exception ex)
469505
{
@@ -649,10 +685,12 @@ public virtual AsyncPageable<PhoneNumberEntity> GetAllReleasesAsync(Cancellation
649685
scope.Start();
650686
try
651687
{
652-
return PageResponseEnumerator.CreateAsyncEnumerable(async s =>
688+
return PageResponseEnumerator.CreateAsyncEnumerable(async nextLink =>
653689
{
654-
Response<PhoneNumberEntities> response = await RestClient.GetAllReleasesAsync(skip: null, take: null, cancellationToken).ConfigureAwait(false);
655-
return Page.FromValues(response.Value.Entities, continuationToken: null!, response.GetRawResponse());
690+
Response<PhoneNumberEntities> response = nextLink is null
691+
? await RestClient.GetAllReleasesAsync(skip: null, take: null, cancellationToken).ConfigureAwait(false)
692+
: await RestClient.GetAllReleasesNextPageAsync(nextLink, skip: null, take: null, cancellationToken).ConfigureAwait(false);
693+
return Page.FromValues(response.Value.Entities, response.Value.NextLink, response.GetRawResponse());
656694
});
657695
}
658696
catch (Exception ex)
@@ -671,8 +709,14 @@ public virtual Pageable<PhoneNumberEntity> GetAllReleases(CancellationToken canc
671709
scope.Start();
672710
try
673711
{
674-
Response<PhoneNumberEntities> response = RestClient.GetAllReleases(skip: null, take: null, cancellationToken);
675-
return PageResponseEnumerator.CreateEnumerable(s => Page.FromValues(response.Value.Entities, continuationToken: null!, response.GetRawResponse()));
712+
return PageResponseEnumerator.CreateEnumerable(nextLink =>
713+
{
714+
Response<PhoneNumberEntities> response = nextLink is null
715+
? RestClient.GetAllReleases(skip: null, take: null, cancellationToken)
716+
: RestClient.GetAllReleasesNextPage(nextLink, skip: null, take: null, cancellationToken);
717+
718+
return Page.FromValues(response.Value.Entities, response.Value.NextLink, response.GetRawResponse());
719+
});
676720
}
677721
catch (Exception ex)
678722
{
@@ -776,10 +820,13 @@ public virtual AsyncPageable<PhoneNumberEntity> GetAllReservationsAsync(Cancella
776820
scope.Start();
777821
try
778822
{
779-
return PageResponseEnumerator.CreateAsyncEnumerable(async s =>
823+
return PageResponseEnumerator.CreateAsyncEnumerable(async nextLink =>
780824
{
781-
Response<PhoneNumberEntities> response = await RestClient.GetAllSearchesAsync(skip: null, take: null, cancellationToken).ConfigureAwait(false);
782-
return Page.FromValues(response.Value.Entities, continuationToken: null!, response.GetRawResponse());
825+
Response<PhoneNumberEntities> response = nextLink is null
826+
? await RestClient.GetAllSearchesAsync(skip: null, take: null, cancellationToken).ConfigureAwait(false)
827+
: await RestClient.GetAllSearchesNextPageAsync(nextLink, skip: null, take: null, cancellationToken).ConfigureAwait(false);
828+
829+
return Page.FromValues(response.Value.Entities, response.Value.NextLink, response.GetRawResponse());
783830
});
784831
}
785832
catch (Exception ex)
@@ -798,8 +845,14 @@ public virtual Pageable<PhoneNumberEntity> GetAllReservations(CancellationToken
798845
scope.Start();
799846
try
800847
{
801-
Response<PhoneNumberEntities> response = RestClient.GetAllSearches(skip: null, take: null, cancellationToken);
802-
return PageResponseEnumerator.CreateEnumerable(s => Page.FromValues(response.Value.Entities, continuationToken: null!, response.GetRawResponse()));
848+
return PageResponseEnumerator.CreateEnumerable(nextLink =>
849+
{
850+
Response<PhoneNumberEntities> response = nextLink is null
851+
? RestClient.GetAllSearches(skip: null, take: null, cancellationToken)
852+
: RestClient.GetAllSearchesNextPage(nextLink, skip: null, take: null, cancellationToken);
853+
854+
return Page.FromValues(response.Value.Entities, response.Value.NextLink, response.GetRawResponse());
855+
});
803856
}
804857
catch (Exception ex)
805858
{

sdk/communication/Azure.Communication.Administration/tests/PhoneNumberAdministrationClient/PhoneNumberAdministrationClientLiveTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,36 @@ public async Task GetAllPhoneNumbers()
5858
Assert.IsNotNull(numbers);
5959
}
6060

61+
[Test]
62+
public async Task GetAllReservations()
63+
{
64+
// Arrange
65+
var client = CreateClient();
66+
67+
const string locale = "en-US";
68+
const string countryCode = "US";
69+
70+
var pageablePhonePlanGroups = client.GetPhonePlanGroupsAsync(countryCode, locale);
71+
var phonePlanGroups = await pageablePhonePlanGroups.ToEnumerableAsync().ConfigureAwait(false);
72+
73+
string phonePlanGroupId = phonePlanGroups.First(group => group.PhoneNumberType == PhoneNumberType.TollFree).PhonePlanGroupId;
74+
var pageablePhonePlans = client.GetPhonePlansAsync(countryCode, phonePlanGroupId, locale);
75+
var phonePlan = (await pageablePhonePlans.ToEnumerableAsync()).First();
76+
var areaCode = phonePlan.AreaCodes.First();
77+
78+
var reservationOptions = new CreateReservationOptions("My reservation", "my description", new[] { phonePlan.PhonePlanId }, areaCode);
79+
reservationOptions.Quantity = 1;
80+
var reservationOperation = await client.StartReservationAsync(reservationOptions);
81+
82+
await reservationOperation.WaitForCompletionAsync().ConfigureAwait(false);
83+
84+
// Act
85+
var reservationsPagable = client.GetAllReservationsAsync();
86+
var reservations = await reservationsPagable.ToEnumerableAsync();
87+
88+
Assert.IsNotEmpty(reservations);
89+
}
90+
6191
[Test]
6292
[TestCase(null, null)]
6393
[TestCase("en-US", null)]

0 commit comments

Comments
 (0)