Exemplo n.º 1
0
        public async Task <GetOrdersResponse> GetOrdersAsync(string mark = "", params string[] ordersIds)
        {
            var orders = new GetOrdersResponse();

            var totalRecords   = 0;
            var recordsPerPage = this._itemsPerPage;
            var pageNumber     = 1;
            var hasMoreOrders  = false;

            do
            {
                var headers = CreateEbayGetOrdersRequestHeadersWithApiCallName();

                var body = this.CreateGetOrdersRequestBody(recordsPerPage, pageNumber, ordersIds);

                await ActionPolicies.GetAsync.Do(async() =>
                {
                    var webRequest = await this.CreateEbayStandartPostRequestWithCertAsync(this._endPoint, headers, body, mark, CancellationToken.None).ConfigureAwait(false);

                    using (var memStream = await this._webRequestServices.GetResponseStreamAsync(webRequest, mark, CancellationToken.None).ConfigureAwait(false))
                    {
                        var pagination = new EbayPaginationResultResponseParser().Parse(memStream);
                        if (pagination != null)
                        {
                            totalRecords = pagination.TotalNumberOfEntries;
                        }

                        var getOrdersResponseParsed = new EbayGetOrdersResponseParser().Parse(memStream);
                        if (getOrdersResponseParsed != null)
                        {
                            if (getOrdersResponseParsed.Errors != null)
                            {
                                orders.Errors = getOrdersResponseParsed.Errors;
                                return;
                            }
                            hasMoreOrders = getOrdersResponseParsed.HasMoreOrders;
                            if (getOrdersResponseParsed.Orders != null)
                            {
                                orders.Orders.AddRange(getOrdersResponseParsed.Orders);
                            }
                        }
                    }
                }).ConfigureAwait(false);

                pageNumber++;
            } while(hasMoreOrders);

            return(orders);
        }
        public void ParsePaginationResultResponse_ResultContainsMultiplePages_AllPagesHandled()
        {
            //A
            using (
                var fs = new FileStream(@".\Files\GetSellerListResponse\EbayServiceGetSellerListResponseWith1PageOf4Contains1Item.xml", FileMode.Open, FileAccess.Read))
            {
                const int itemCount  = 4;
                const int pagesCount = 4;

                //A
                var orders = new EbayPaginationResultResponseParser().Parse(fs);

                //A
                orders.TotalNumberOfEntries.Should().Be(itemCount, "because source file contains record about {0} items", itemCount);
                orders.TotalNumberOfPages.Should().Be(pagesCount, "because source file contains record about {0} pages", pagesCount);
            }
        }