Esempio n. 1
0
        public async Task SendRequestAsync_ReturnsSingleErrorResponse()
        {
            // Arrange
            HttpContext[] contexts = new HttpContext[]
            {
                HttpContextHelper.Create("Get", "http://example.com"),
                HttpContextHelper.Create("Post", "http://example.com"),
                HttpContextHelper.Create("Put", "http://example.com")
            };
            ChangeSetRequestItem requestItem = new ChangeSetRequestItem(contexts);

            RequestDelegate handler = context =>
            {
                if (context.Request.Method == "Post")
                {
                    context.Response.StatusCode = StatusCodes.Status400BadRequest;
                }

                return(Task.FromResult(context.Response));
            };

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

            // Assert
            ChangeSetResponseItem changesetResponse = Assert.IsType <ChangeSetResponseItem>(response);
            HttpContext           responseContext   = Assert.Single(changesetResponse.Contexts);

            Assert.Equal(StatusCodes.Status400BadRequest, responseContext.Response.StatusCode);
        }
        public void WriteMessageAsync_SynchronousResponseContainsContentId_IfHasContentIdInRequestChangeSet()
        {
            // Arrange
            HeaderDictionary headers = new HeaderDictionary
            {
                { "Content-Type", $"multipart/mixed;charset=utf-8;boundary={Guid.NewGuid()}" },
            };

            MemoryStream          ms            = new MemoryStream();
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(ms, headers);

            string       contentId    = Guid.NewGuid().ToString();
            HttpResponse httpResponse = CreateResponse("any", new HeaderDictionary(), "text/example;charset=utf-8");

            httpResponse.HttpContext.Request.SetODataContentId(contentId);

            // Act
            ODataBatchWriter batchWriter = new ODataMessageWriter(odataResponse).CreateODataBatchWriter();

            batchWriter.WriteStartBatch();
            batchWriter.WriteStartChangeset();

            // Assert
            Action         test      = () => ODataBatchResponseItem.WriteMessageAsync(batchWriter, httpResponse.HttpContext).Wait();
            ODataException exception = ExceptionAssert.Throws <ODataException>(test);

            Assert.Equal("An asynchronous operation was called on a synchronous batch writer. Calls on a batch writer instance must be either all synchronous or all asynchronous.",
                         exception.Message);
        }
Esempio n. 3
0
        public async Task WriteMessageAsync_WritesResponseMessage()
        {
            MemoryStream ms      = new MemoryStream();
            HttpContent  content = new StringContent(String.Empty, Encoding.UTF8, "multipart/mixed");

            content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundary", Guid.NewGuid().ToString()));
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(ms, content.Headers);
            var batchWriter = new ODataMessageWriter(odataResponse).CreateODataBatchWriter();
            HttpResponseMessage response = new HttpResponseMessage()
            {
                Content = new StringContent("example content", Encoding.UTF8, "text/example")
            };

            response.Headers.Add("customHeader", "bar");

            batchWriter.WriteStartBatch();
            await ODataBatchResponseItem.WriteMessageAsync(batchWriter, response, CancellationToken.None);

            batchWriter.WriteEndBatch();

            ms.Position = 0;
            string result = new StreamReader(ms).ReadToEnd();

            Assert.Contains("example content", result);
            Assert.Contains("text/example", result);
            Assert.Contains("customHeader", result);
            Assert.Contains("bar", result);
        }
Esempio n. 4
0
        public async Task WriteMessageAsync_ResponseContainsContentId_IfHasContentIdInRequestChangeSet()
        {
            MemoryStream ms      = new MemoryStream();
            HttpContent  content = new StringContent(String.Empty, Encoding.UTF8, "multipart/mixed");

            content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundary", Guid.NewGuid().ToString()));
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(ms, content.Headers);
            var batchWriter = new ODataMessageWriter(odataResponse).CreateODataBatchWriter();
            HttpResponseMessage response = new HttpResponseMessage
            {
                Content = new StringContent("any", Encoding.UTF8, "text/example")
            };
            var request   = new HttpRequestMessage();
            var contentId = Guid.NewGuid().ToString();

            request.SetODataContentId(contentId);
            response.RequestMessage = request;

            batchWriter.WriteStartBatch();
            batchWriter.WriteStartChangeset();
            await ODataBatchResponseItem.WriteMessageAsync(batchWriter, response, CancellationToken.None);

            batchWriter.WriteEndChangeset();
            batchWriter.WriteEndBatch();

            ms.Position = 0;
            string result = new StreamReader(ms).ReadToEnd();

            Assert.Contains("any", result);
            Assert.Contains("text/example", result);
            Assert.Contains("Content-ID", result);
            Assert.Contains(contentId, result);
        }
Esempio n. 5
0
 public void WriteMessageAsync_NullWriter_Throws()
 {
     Assert.ThrowsArgumentNull(
         () => ODataBatchResponseItem.WriteMessageAsync(null, new HttpResponseMessage(), CancellationToken.None)
         .Wait(),
         "writer");
 }
Esempio n. 6
0
        public async Task SendRequestAsync_DisposesResponseInCaseOfException()
        {
            // Arrange
            HttpContext[] contexts = new HttpContext[]
            {
                HttpContextHelper.Create("Get", "http://example.com"),
                HttpContextHelper.Create("Post", "http://example.com"),
                HttpContextHelper.Create("Put", "http://example.com")
            };
            ChangeSetRequestItem requestItem = new ChangeSetRequestItem(contexts);

            List <HttpResponse> responses = new List <HttpResponse>();
            RequestDelegate     handler   = context =>
            {
                if (context.Request.Method == "Put")
                {
                    throw new InvalidOperationException();
                }

                responses.Add(context.Response);
                return(Task.FromResult(context.Response));
            };

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

            // Assert
            ChangeSetResponseItem changesetResponse = Assert.IsType <ChangeSetResponseItem>(response);
            HttpContext           responseContext   = Assert.Single(changesetResponse.Contexts);

            Assert.Equal(StatusCodes.Status500InternalServerError, responseContext.Response.StatusCode);

            Assert.Equal(2, responses.Count);
        }
        public async Task WriteMessageAsync_AsynchronouslyWritesResponseMessage()
        {
            // Arrange
            HeaderDictionary headers = new HeaderDictionary
            {
                { "Content-Type", $"multipart/mixed;charset=utf-8;boundary={Guid.NewGuid()}" },
            };
            MemoryStream          ms            = new MemoryStream();
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(ms, headers);

            HeaderDictionary responseHeaders = new HeaderDictionary
            {
                { "customHeader", "bar" }
            };
            HttpResponse response = CreateResponse("example content", responseHeaders, "text/example");

            // Act
            ODataBatchWriter batchWriter = await new ODataMessageWriter(odataResponse).CreateODataBatchWriterAsync();
            await batchWriter.WriteStartBatchAsync();

            await ODataBatchResponseItem.WriteMessageAsync(batchWriter, response.HttpContext);

            await batchWriter.WriteEndBatchAsync();

            ms.Position = 0;
            string result = new StreamReader(ms).ReadToEnd();

            // Assert
            Assert.Contains("example content", result);
            Assert.Contains("text/example", result);
            Assert.Contains("customHeader", result);
            Assert.Contains("bar", result);
        }
        public void WriteMessage_SynchronouslyWritesResponseMessage_Throws()
        {
            HeaderDictionary headers = new HeaderDictionary
            {
                { "Content-Type", $"multipart/mixed;charset=utf-8;boundary={Guid.NewGuid()}" },
            };

            MemoryStream          ms            = new MemoryStream();
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(ms, headers);

            HeaderDictionary responseHeaders = new HeaderDictionary
            {
                { "customHeader", "bar" }
            };
            HttpResponse response = CreateResponse("example content", responseHeaders, "text/example");

            // Act
            ODataBatchWriter batchWriter = new ODataMessageWriter(odataResponse).CreateODataBatchWriter();

            batchWriter.WriteStartBatch();

            // Assert
            Action         test      = () => ODataBatchResponseItem.WriteMessageAsync(batchWriter, response.HttpContext).Wait();
            ODataException exception = ExceptionAssert.Throws <ODataException>(test);

            Assert.Equal("An asynchronous operation was called on a synchronous batch writer. Calls on a batch writer instance must be either all synchronous or all asynchronous.",
                         exception.Message);
        }
        public async Task WriteMessageAsync_NullWriter_Throws()
        {
            // Arrange
            HttpContext context = new Mock <HttpContext>().Object;

            // Act & Assert
            await ExceptionAssert.ThrowsArgumentNullAsync(() => ODataBatchResponseItem.WriteMessageAsync(null, context), "writer");
        }
        public void WriteMessageAsync_NullResponse_Throws()
        {
            HttpContent content = new StringContent(String.Empty, Encoding.UTF8, "multipart/mixed");

            content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundary", Guid.NewGuid().ToString()));
            IODataResponseMessage odataResponse = new ODataMessageWrapper(new MemoryStream(), content.Headers);
            ODataMessageWriter    messageWriter = new ODataMessageWriter(odataResponse);

            Assert.ThrowsArgumentNull(
                () => ODataBatchResponseItem.WriteMessageAsync(messageWriter.CreateODataBatchWriter(), null).Wait(),
                "response");
        }
Esempio n. 11
0
        public async Task WriteMessageAsync_NullResponse_Throws()
        {
            HttpContent content = new StringContent(String.Empty, Encoding.UTF8, "multipart/mixed");

            content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundary", Guid.NewGuid().ToString()));
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(new MemoryStream(), content.Headers);
            ODataMessageWriter    messageWriter = new ODataMessageWriter(odataResponse);

            await ExceptionAssert.ThrowsArgumentNullAsync(
                () => ODataBatchResponseItem.WriteMessageAsync(messageWriter.CreateODataBatchWriter(), null, CancellationToken.None),
                "response");
        }
Esempio n. 12
0
        public void CreateODataBatchResponseAsync_ReturnsHttpStatusCodeOK()
        {
            // Arrange
            HttpRequestMessage request = new HttpRequestMessage();
            var responses = new ODataBatchResponseItem[] { };
            var quotas    = new ODataMessageQuotas();

            // Act
            var response = request.CreateODataBatchResponseAsync(responses, quotas).Result;

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public async Task WriteMessageAsync_NullContext_Throws()
        {
            // Arrange
            HeaderDictionary headers = new HeaderDictionary
            {
                { "Content-Type", $"multipart/mixed;charset=utf-8;boundary={Guid.NewGuid()}" },
            };
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(new MemoryStream(), headers);
            ODataMessageWriter    messageWriter = new ODataMessageWriter(odataResponse);

            // Act & Assert
            await ExceptionAssert.ThrowsArgumentNullAsync(
                () => ODataBatchResponseItem.WriteMessageAsync(messageWriter.CreateODataBatchWriter(), null), "context");
        }
Esempio n. 14
0
        public async Task CreateODataBatchResponseAsync_ReturnsHttpStatusCodeOK()
        {
            // Arrange
            HttpRequestMessage request = new HttpRequestMessage();

            request.EnableHttpDependencyInjectionSupport();
            var responses = new ODataBatchResponseItem[] { };
            var quotas    = new ODataMessageQuotas();

            // Act
            var response = await request.CreateODataBatchResponseAsync(responses, quotas);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public void CreateResponseMessageAsync_ReturnsODataBatchContent()
        {
            DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler(new HttpServer());

            ODataBatchResponseItem[] responses = new ODataBatchResponseItem[]
            {
                new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.OK))
            };

            HttpResponseMessage response = batchHandler.CreateResponseMessageAsync(responses, new HttpRequestMessage(), CancellationToken.None).Result;

            var batchContent = Assert.IsType <ODataBatchContent>(response.Content);

            Assert.Equal(1, batchContent.Responses.Count());
        }
Esempio n. 16
0
        public async Task CreateResponseMessageAsync_ReturnsODataBatchContent()
        {
            DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler(new HttpServer());

            ODataBatchResponseItem[] responses = new ODataBatchResponseItem[]
            {
                new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.OK))
            };
            HttpRequestMessage request = new HttpRequestMessage();

            request.EnableHttpDependencyInjectionSupport();

            HttpResponseMessage response = await batchHandler.CreateResponseMessageAsync(responses, request, CancellationToken.None);

            var batchContent = Assert.IsType <ODataBatchContent>(response.Content);

            Assert.Single(batchContent.Responses);
        }
        public async Task CreateODataBatchResponseAsync_ReturnsHttpStatusCodeOK()
        {
            // Arrange
            IEdmModel   model   = new EdmModel();
            HttpContext context = new DefaultHttpContext();
            HttpRequest request = context.Request;

            context.ODataFeature().RoutePrefix = "odata";
            context.RequestServices = BuildServiceProvider(opt => opt.AddRouteComponents("odata", model));

            ODataBatchResponseItem[] responses = new ODataBatchResponseItem[] { };
            ODataMessageQuotas       quotas    = new ODataMessageQuotas();

            // Act
            await request.CreateODataBatchResponseAsync(responses, quotas);

            // Assert
            Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
        }
Esempio n. 18
0
        public async Task SendRequestAsync_ReturnsChangeSetResponse()
        {
            // Arrange
            HttpContext[] contexts = new HttpContext[]
            {
                HttpContextHelper.Create("Get", "http://example.com"),
                HttpContextHelper.Create("Post", "http://example.com")
            };
            ChangeSetRequestItem requestItem = new ChangeSetRequestItem(contexts);

            RequestDelegate handler = context => Task.FromResult(context.Response);

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

            // Assert
            ChangeSetResponseItem changesetResponse = Assert.IsType <ChangeSetResponseItem>(response);

            Assert.Equal(2, changesetResponse.Contexts.Count());
        }
Esempio n. 19
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);
        }
        public async Task WriteMessageAsync_ResponseContainsContentId_IfHasContentIdInRequestChangeSet()
        {
            // Arrange
            HeaderDictionary headers = new HeaderDictionary
            {
                { "Content-Type", $"multipart/mixed;charset=utf-8;boundary={Guid.NewGuid()}" },
            };

            MemoryStream          ms            = new MemoryStream();
            IODataResponseMessage odataResponse = ODataMessageWrapperHelper.Create(ms, headers);

            string       contentId    = Guid.NewGuid().ToString();
            HttpResponse httpResponse = CreateResponse("any", new HeaderDictionary(), "text/example;charset=utf-8");

            httpResponse.HttpContext.Request.SetODataContentId(contentId);

            // Act
            ODataBatchWriter batchWriter = await new ODataMessageWriter(odataResponse).CreateODataBatchWriterAsync();
            await batchWriter.WriteStartBatchAsync();

            await batchWriter.WriteStartChangesetAsync();

            await ODataBatchResponseItem.WriteMessageAsync(batchWriter, httpResponse.HttpContext);

            await batchWriter.WriteEndChangesetAsync();

            await batchWriter.WriteEndBatchAsync();

            ms.Position = 0;
            string result = new StreamReader(ms).ReadToEnd();

            // Assert
            Assert.Contains("any", result);
            Assert.Contains("text/example", result);
            Assert.Contains("Content-ID", result);
            Assert.Contains(contentId, result);
        }
        public async Task CreateResponseMessageAsync_ReturnsODataBatchContent()
        {
            // Arrange
            DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler();
            HttpRequest request = RequestFactory.Create(opt => opt.AddModel("odata", EdmCoreModel.Instance));

            request.ODataFeature().PrefixName = "odata";
            HttpContext httpContext           = request.HttpContext;

            httpContext.Response.StatusCode = StatusCodes.Status200OK;
            httpContext.Response.Body       = new MemoryStream();
            ODataBatchResponseItem[] responses = new ODataBatchResponseItem[]
            {
                new OperationResponseItem(httpContext)
            };

            // Act
            await batchHandler.CreateResponseMessageAsync(responses, request);

            // Assert
            string responseString = httpContext.Response.ReadBody();

            Assert.Contains("200 OK", responseString);
        }
Esempio n. 22
0
 public async Task WriteMessageAsync_NullWriter_Throws()
 {
     await ExceptionAssert.ThrowsArgumentNullAsync(
         () => ODataBatchResponseItem.WriteMessageAsync(null, new HttpResponseMessage(), CancellationToken.None),
         "writer");
 }