public override async Task <IList <ODataBatchRequestItem> > ParseBatchRequestsAsync(
            HttpRequestMessage request,
            CancellationToken cancellationToken)
        {
            IList <ODataBatchRequestItem> requests = await base.ParseBatchRequestsAsync(request, cancellationToken);

            foreach (ODataBatchRequestItem requestItem in requests)
            {
                OperationRequestItem operation = requestItem as OperationRequestItem;
                if (operation != null)
                {
                    operation.Request.RequestUri = RemoveSessionIdFromUri(operation.Request.RequestUri);
                }
                else
                {
                    ChangeSetRequestItem changeset = requestItem as ChangeSetRequestItem;
                    if (changeset != null)
                    {
                        foreach (HttpRequestMessage changesetOperation in changeset.Requests)
                        {
                            changesetOperation.RequestUri = RemoveSessionIdFromUri(changesetOperation.RequestUri);
                        }
                    }
                }
            }

            return(requests);
        }
        public void Parameter_Constructor()
        {
            HttpRequestMessage   request     = new HttpRequestMessage();
            OperationRequestItem requestItem = new OperationRequestItem(request);

            Assert.Same(request, requestItem.Request);
        }
        public void Dispose_DisposesHttpRequestMessage()
        {
            OperationRequestItem requestItem = new OperationRequestItem(new MockHttpRequestMessage());

            requestItem.Dispose();

            Assert.True(((MockHttpRequestMessage)requestItem.Request).IsDisposed);
        }
        public async Task SendRequestAsync_NullInvoker_Throws()
        {
            OperationRequestItem requestItem = new OperationRequestItem(new HttpRequestMessage());

            await ExceptionAssert.ThrowsArgumentNullAsync(
                () => requestItem.SendRequestAsync(null, CancellationToken.None),
                "invoker");
        }
Exemple #5
0
        public void SendRequestAsync_NullInvoker_Throws()
        {
            OperationRequestItem requestItem = new OperationRequestItem(new HttpRequestMessage());

            Assert.ThrowsArgumentNull(
                () => requestItem.SendRequestAsync(null, CancellationToken.None).Wait(),
                "invoker");
        }
Exemple #6
0
        public async Task SendRequestAsync_NullHandler_Throws()
        {
            // Arrange
            Mock <HttpContext>   context     = new Mock <HttpContext>();
            OperationRequestItem requestItem = new OperationRequestItem(context.Object);

            // Act & Assert
            await ExceptionAssert.ThrowsArgumentNullAsync(() => requestItem.SendRequestAsync(null), "handler");
        }
Exemple #7
0
        public void Parameter_Constructor()
        {
            // Arrange & Act
            Mock <HttpContext>   context     = new Mock <HttpContext>();
            OperationRequestItem requestItem = new OperationRequestItem(context.Object);

            // Assert
            Assert.Same(context.Object, requestItem.Context);
        }
        public void GetResourcesForDisposal_ReturnsResourceRegisteredForDispose()
        {
            var disposeObject = new StringContent("foo");
            var request       = new HttpRequestMessage(HttpMethod.Get, "http://example.com");

            request.RegisterForDispose(disposeObject);

            OperationRequestItem requestItem = new OperationRequestItem(request);

            var resourcesForDisposal = requestItem.GetResourcesForDisposal();

            Assert.Single(resourcesForDisposal);
            Assert.Contains(disposeObject, resourcesForDisposal);
        }
        public async Task SendRequestAsync_ReturnsOperationResponse()
        {
            HttpRequestMessage   request     = new HttpRequestMessage(HttpMethod.Get, "http://example.com");
            OperationRequestItem requestItem = new OperationRequestItem(request);

            Mock <HttpMessageInvoker> invoker = new Mock <HttpMessageInvoker>(new HttpServer());

            invoker.Setup(i => i.SendAsync(It.IsAny <HttpRequestMessage>(), CancellationToken.None))
            .Returns(() =>
            {
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotModified)));
            });

            var response = await requestItem.SendRequestAsync(invoker.Object, CancellationToken.None);

            var operationResponse = Assert.IsType <OperationResponseItem>(response);

            Assert.Equal(HttpStatusCode.NotModified, operationResponse.Response.StatusCode);
        }
Exemple #10
0
        public async Task SendRequestAsync_ReturnsOperationResponse()
        {
            // Arrange
            HttpContext          context     = HttpContextHelper.Create("Get", "http://example.com");
            OperationRequestItem requestItem = new OperationRequestItem(context);

            RequestDelegate handler = context =>
            {
                context.Response.StatusCode = StatusCodes.Status304NotModified;
                return(Task.FromResult(context.Response));
            };

            // Act
            ODataBatchResponseItem response = await requestItem.SendRequestAsync(handler);

            // Assert
            OperationResponseItem operationResponse = Assert.IsType <OperationResponseItem>(response);

            Assert.Equal(StatusCodes.Status304NotModified, operationResponse.Context.Response.StatusCode);
        }
Exemple #11
0
        /// <summary>
        /// Executes the batch request and associates a <see cref="ShoppingContext"/>instance with all the requests of
        /// a single changeset and wraps the execution of the whole changeset within a transaction.
        /// </summary>
        /// <param name="requests">The <see cref="ODataBatchRequestItem"/> instances of this batch request.</param>
        /// <param name="cancellation">The <see cref="CancellationToken"/> associated with the request.</param>
        /// <returns>The list of responses associated with the batch request.</returns>
        public async override Task <IList <ODataBatchResponseItem> > ExecuteRequestMessagesAsync(
            IEnumerable <ODataBatchRequestItem> requests,
            CancellationToken cancellation)
        {
            if (requests == null)
            {
                throw new ArgumentNullException("requests");
            }

            IList <ODataBatchResponseItem> responses = new List <ODataBatchResponseItem>();

            try
            {
                foreach (ODataBatchRequestItem request in requests)
                {
                    OperationRequestItem operation = request as OperationRequestItem;
                    if (operation != null)
                    {
                        responses.Add(await request.SendRequestAsync(Invoker, cancellation));
                    }
                    else
                    {
                        await ExecuteChangeSet((ChangeSetRequestItem)request, responses, cancellation);
                    }
                }
            }
            catch
            {
                foreach (ODataBatchResponseItem response in responses)
                {
                    if (response != null)
                    {
                        response.Dispose();
                    }
                }
                throw;
            }

            return(responses);
        }