public void ListAutoPaging_StartingAfter() { // Set up stubbed requests var response1 = new HttpResponseMessage(HttpStatusCode.OK); response1.Content = new StringContent(GetResourceAsString("pageable_models.1.json")); var response2 = new HttpResponseMessage(HttpStatusCode.OK); response2.Content = new StringContent(GetResourceAsString("pageable_models.2.json")); this.MockHttpClientFixture.MockHandler.Protected() .SetupSequence <Task <HttpResponseMessage> >( "SendAsync", ItExpr.Is <HttpRequestMessage>(m => m.Method == HttpMethod.Get && m.RequestUri.AbsolutePath == "/v1/pageablemodels"), ItExpr.IsAny <CancellationToken>()) .Returns(Task.FromResult(response1)) .Returns(Task.FromResult(response2)) .Throws(new StripeTestException("Unexpected invocation!")); // Call auto-paging method var service = new PageableService(this.StripeClient); var options = new ListOptions { Limit = 2, StartingAfter = "pm_124", }; var models = service.ListAutoPaging(options).ToList(); // Check results Assert.Equal(3, models.Count); Assert.Equal("pm_125", models[0].Id); Assert.Equal("pm_126", models[1].Id); Assert.Equal("pm_127", models[2].Id); // Check invocations this.MockHttpClientFixture.MockHandler.Protected() .Verify( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(m => m.Method == HttpMethod.Get && m.RequestUri.AbsolutePath == "/v1/pageablemodels" && m.RequestUri.Query == "?limit=2&starting_after=pm_124"), ItExpr.IsAny <CancellationToken>()); this.MockHttpClientFixture.MockHandler.Protected() .Verify( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(m => m.Method == HttpMethod.Get && m.RequestUri.AbsolutePath == "/v1/pageablemodels" && m.RequestUri.Query == "?limit=2&starting_after=pm_126"), ItExpr.IsAny <CancellationToken>()); }
public async Task ListAutoPagingAsync_WithCancellation() { // Set up stubbed requests var response1 = new HttpResponseMessage(HttpStatusCode.OK); response1.Content = new StringContent(GetResourceAsString("pageable_models.0.json")); var response2 = new HttpResponseMessage(HttpStatusCode.OK); response2.Content = new StringContent(GetResourceAsString("pageable_models.1.json")); this.MockHttpClientFixture.MockHandler.Protected() .SetupSequence <Task <HttpResponseMessage> >( "SendAsync", ItExpr.Is <HttpRequestMessage>(m => m.Method == HttpMethod.Get && m.RequestUri.AbsolutePath == "/v1/pageablemodels"), ItExpr.IsAny <CancellationToken>()) .Returns(Task.FromResult(response1)) .Returns(Task.FromResult(response2)) .Throws(new StripeTestException("Unexpected invocation!")); // Call auto-paging method var service = new PageableService(this.StripeClient); var options = new ListOptions { Limit = 2, }; var models = new List <PageableModel>(); var source = new CancellationTokenSource(); try { await foreach (var model in service.ListAutoPagingAsync(options).WithCancellation(source.Token)) { models.Add(model); // Cancel in the middle of the second page if (model.Id == "pm_125") { source.Cancel(); } } Assert.True(false, "Exception OperationCanceledException to be thrown"); } catch (OperationCanceledException) { } finally { source.Dispose(); } // Check results Assert.Equal(3, models.Count); Assert.Equal("pm_123", models[0].Id); Assert.Equal("pm_124", models[1].Id); Assert.Equal("pm_125", models[2].Id); // Check invocations this.MockHttpClientFixture.MockHandler.Protected() .Verify( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(m => m.Method == HttpMethod.Get && m.RequestUri.AbsolutePath == "/v1/pageablemodels" && m.RequestUri.Query == "?limit=2"), ItExpr.IsAny <CancellationToken>()); this.MockHttpClientFixture.MockHandler.Protected() .Verify( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(m => m.Method == HttpMethod.Get && m.RequestUri.AbsolutePath == "/v1/pageablemodels" && m.RequestUri.Query == "?limit=2&starting_after=pm_124"), ItExpr.IsAny <CancellationToken>()); }