Beispiel #1
0
        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>());
        }