Пример #1
0
        public void ContentNegotiator_ForApiController_Throws_WhenServiceIsNull()
        {
            // Arrange
            HttpStatusCode statusCode = CreateStatusCode();
            object         content    = CreateContent();
            ApiController  controller = CreateController();

            using (HttpConfiguration configuration = CreateConfiguration(CreateFormatter(), null))
                using (HttpRequestMessage request = CreateRequest())
                {
                    controller.Configuration = configuration;

                    NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(
                        statusCode,
                        content,
                        controller
                        );

                    // Act & Assert
                    Assert.Throws <InvalidOperationException>(
                        () =>
                    {
                        IContentNegotiator ignore = result.ContentNegotiator;
                    },
                        "The provided configuration does not have an instance of the "
                        + "'System.Net.Http.Formatting.IContentNegotiator' service registered."
                        );
                }
        }
        private OkNegotiatedContentResult(T content, NegotiatedContentResult <T> .IDependencyProvider dependencies)
        {
            Contract.Assert(dependencies != null);

            _content      = content;
            _dependencies = dependencies;
        }
Пример #3
0
        public void Request_ForApiController_EvaluatesOnce()
        {
            // Arrange
            HttpStatusCode statusCode = CreateStatusCode();
            object         content    = CreateContent();
            ApiController  controller = CreateController();

            using (HttpConfiguration configuration = CreateConfiguration(CreateFormatter(), CreateContentNegotiator()))
            {
                controller.Configuration = configuration;

                NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(statusCode, content,
                                                                                               controller);

                using (HttpRequestMessage expectedRequest = CreateRequest())
                {
                    controller.Request = expectedRequest;
                    HttpRequestMessage ignore = result.Request;

                    using (HttpRequestMessage otherRequest = CreateRequest())
                    {
                        controller.Request = otherRequest;

                        // Act
                        HttpRequestMessage request = result.Request;

                        // Assert
                        Assert.Same(expectedRequest, request);
                    }
                }
            }
        }
Пример #4
0
        public void Formatters_ForApiController_EvaluatesOnce()
        {
            // Arrange
            HttpStatusCode     statusCode        = CreateStatusCode();
            object             content           = CreateContent();
            ApiController      controller        = CreateController();
            MediaTypeFormatter expectedFormatter = CreateFormatter();
            IContentNegotiator contentNegotiator = CreateContentNegotiator();

            using (HttpConfiguration earlyConfiguration = CreateConfiguration(expectedFormatter, contentNegotiator))
                using (HttpRequestMessage request = CreateRequest())
                {
                    controller.Configuration = earlyConfiguration;
                    controller.Request       = request;

                    NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(statusCode, content,
                                                                                                   controller);

                    IEnumerable <MediaTypeFormatter> ignore = result.Formatters;

                    using (HttpConfiguration lateConfiguration = CreateConfiguration(CreateFormatter(), contentNegotiator))
                    {
                        controller.Configuration = lateConfiguration;

                        // Act
                        IEnumerable <MediaTypeFormatter> formatters = result.Formatters;

                        // Assert
                        Assert.NotNull(formatters);
                        MediaTypeFormatter formatter = Assert.Single(formatters);
                        Assert.Same(expectedFormatter, formatter);
                    }
                }
        }
Пример #5
0
        public async Task ExecuteAsync_Returns_CorrectResponse_WhenContentNegotiationFails()
        {
            // Arrange
            HttpStatusCode           statusCode        = HttpStatusCode.Conflict;
            object                   content           = CreateContent();
            ContentNegotiationResult negotiationResult = null;

            using (HttpRequestMessage expectedRequest = CreateRequest())
            {
                IEnumerable <MediaTypeFormatter> expectedFormatters = CreateFormatters();

                Mock <IContentNegotiator> spy = new Mock <IContentNegotiator>();
                spy.Setup(n => n.Negotiate(typeof(object), expectedRequest, expectedFormatters)).Returns(
                    negotiationResult);
                IContentNegotiator contentNegotiator = spy.Object;

                IHttpActionResult result = new NegotiatedContentResult <object>(statusCode, content, contentNegotiator,
                                                                                expectedRequest, expectedFormatters);

                // Act
                Task <HttpResponseMessage> task = result.ExecuteAsync(CancellationToken.None);

                // Assert
                Assert.NotNull(task);

                using (HttpResponseMessage response = await task)
                {
                    Assert.NotNull(response);
                    Assert.Equal(HttpStatusCode.NotAcceptable, response.StatusCode);
                    Assert.Same(expectedRequest, response.RequestMessage);
                }
            }
        }
Пример #6
0
        public void ContentNegotiator_ForApiController_EvaluatesOnce()
        {
            // Arrange
            HttpStatusCode     statusCode = CreateStatusCode();
            object             content    = CreateContent();
            IContentNegotiator expectedContentNegotiator = CreateContentNegotiator();
            ApiController      controller = CreateController();

            using (HttpConfiguration configuration = CreateConfiguration(CreateFormatter(), expectedContentNegotiator))
                using (HttpRequestMessage request = CreateRequest())
                {
                    controller.Configuration = configuration;
                    controller.Request       = request;

                    NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(statusCode, content,
                                                                                                   controller);

                    IContentNegotiator ignore = result.ContentNegotiator;

                    configuration.Services.Replace(typeof(IContentNegotiator), CreateContentNegotiator());

                    // Act
                    IContentNegotiator contentNegotiator = result.ContentNegotiator;

                    // Assert
                    Assert.Same(expectedContentNegotiator, contentNegotiator);
                }
        }
Пример #7
0
        public void ApiControllerContent_WithContent_CreatesCorrectNegotiatedContentResult()
        {
            // Arrange
            HttpStatusCode expectedStatusCode = CreateStatusCode();
            object         expectedContent    = CreateContent();
            ApiController  controller         = CreateController();

            // Act
            NegotiatedContentResult <object> result = controller.Content(
                expectedStatusCode,
                expectedContent
                );

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expectedStatusCode, result.StatusCode);
            Assert.Same(expectedContent, result.Content);

            using (
                HttpConfiguration configuration = CreateConfiguration(
                    CreateFormatter(),
                    CreateContentNegotiator()
                    )
                )
                using (HttpRequestMessage expectedRequest = CreateRequest())
                {
                    controller.Configuration = configuration;
                    controller.Request       = expectedRequest;
                    Assert.Same(expectedRequest, result.Request);
                }
        }
        private HttpResponseMessage Execute()
        {
            HttpError error = new HttpError(_exception, _dependencies.IncludeErrorDetail);

            return(NegotiatedContentResult <HttpError> .Execute(HttpStatusCode.InternalServerError, error,
                                                                _dependencies.ContentNegotiator, _dependencies.Request, _dependencies.Formatters));
        }
Пример #9
0
        public void Request_ForApiController_Throws_WhenControllerRequestIsNull()
        {
            // Arrange
            HttpStatusCode statusCode = CreateStatusCode();
            object         content    = CreateContent();
            ApiController  controller = CreateController();

            Assert.Null(controller.Request);

            using (
                HttpConfiguration configuration = CreateConfiguration(
                    CreateFormatter(),
                    CreateContentNegotiator()
                    )
                )
            {
                controller.Configuration = configuration;
                NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(
                    statusCode,
                    content,
                    controller
                    );

                // Act & Assert
                InvalidOperationException exception = Assert.Throws <InvalidOperationException>(
                    () =>
                {
                    HttpRequestMessage ignore = result.Request;
                },
                    "ApiController.Request must not be null."
                    );
            }
        }
Пример #10
0
        public void Formatters_Returns_InstanceProvided()
        {
            // Arrange
            HttpStatusCode     statusCode        = CreateStatusCode();
            object             content           = CreateContent();
            IContentNegotiator contentNegotiator = CreateContentNegotiator();

            using (HttpRequestMessage request = CreateRequest())
            {
                IEnumerable <MediaTypeFormatter> expectedFormatters = CreateFormatters();

                NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(
                    statusCode,
                    content,
                    contentNegotiator,
                    request,
                    expectedFormatters
                    );

                // Act
                IEnumerable <MediaTypeFormatter> formatters = result.Formatters;

                // Assert
                Assert.Same(expectedFormatters, formatters);
            }
        }
Пример #11
0
        public void ContentNegotiator_ForApiController_Throws_WhenConfigurationIsNull()
        {
            // Arrange
            HttpStatusCode        statusCode = CreateStatusCode();
            object                content    = CreateContent();
            ApiController         controller = CreateController();
            HttpControllerContext context    = new HttpControllerContext();

            using (HttpRequestMessage request = CreateRequest())
            {
                controller.ControllerContext = context;

                NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(
                    statusCode,
                    content,
                    controller
                    );

                // Act & Assert
                Assert.Throws <InvalidOperationException>(
                    () =>
                {
                    IContentNegotiator ignore = result.ContentNegotiator;
                },
                    "HttpControllerContext.Configuration must not be null."
                    );
            }
        }
Пример #12
0
        public void StatusCode_Returns_ValueProvided()
        {
            // Arrange
            HttpStatusCode     expectedStatusCode = CreateStatusCode();
            object             content            = CreateContent();
            IContentNegotiator contentNegotiator  = CreateContentNegotiator();

            using (HttpRequestMessage request = CreateRequest())
            {
                IEnumerable <MediaTypeFormatter> formatters = CreateFormatters();

                NegotiatedContentResult <object> result = new NegotiatedContentResult <object>(
                    expectedStatusCode,
                    content,
                    contentNegotiator,
                    request,
                    formatters
                    );

                // Act
                HttpStatusCode statusCode = result.StatusCode;

                // Assert
                Assert.Equal(expectedStatusCode, statusCode);
            }
        }
        private HttpResponseMessage Execute()
        {
            HttpError error = new HttpError(_message);

            return(NegotiatedContentResult <HttpError> .Execute(HttpStatusCode.BadRequest, error,
                                                                _dependencies.ContentNegotiator, _dependencies.Request, _dependencies.Formatters));
        }
Пример #14
0
        public void ExecuteAsync_ForApiController_ReturnsCorrectResponse_WhenContentNegotationSucceeds()
        {
            // Arrange
            HttpStatusCode           expectedStatusCode      = CreateStatusCode();
            object                   expectedContent         = CreateContent();
            ApiController            controller              = CreateController();
            MediaTypeFormatter       expectedInputFormatter  = CreateFormatter();
            MediaTypeFormatter       expectedOutputFormatter = CreateFormatter();
            MediaTypeHeaderValue     expectedMediaType       = CreateMediaType();
            ContentNegotiationResult negotiationResult       = new ContentNegotiationResult(expectedOutputFormatter,
                                                                                            expectedMediaType);

            Expression <Func <IEnumerable <MediaTypeFormatter>, bool> > formattersMatch = (f) =>
                                                                                          f != null && f.AsArray().Length == 1 && f.AsArray()[0] == expectedInputFormatter;

            using (HttpRequestMessage expectedRequest = CreateRequest())
            {
                Mock <IContentNegotiator> spy = new Mock <IContentNegotiator>();
                spy.Setup(n => n.Negotiate(typeof(object), expectedRequest, It.Is(formattersMatch))).Returns(
                    negotiationResult);
                IContentNegotiator contentNegotiator = spy.Object;

                using (HttpConfiguration configuration = CreateConfiguration(expectedInputFormatter,
                                                                             contentNegotiator))
                {
                    controller.Configuration = configuration;
                    controller.Request       = expectedRequest;

                    IHttpActionResult result = new NegotiatedContentResult <object>(expectedStatusCode, expectedContent,
                                                                                    controller);

                    // Act
                    Task <HttpResponseMessage> task = result.ExecuteAsync(CancellationToken.None);

                    // Assert
                    Assert.NotNull(task);
                    task.WaitUntilCompleted();

                    using (HttpResponseMessage response = task.Result)
                    {
                        Assert.NotNull(response);
                        Assert.Equal(expectedStatusCode, response.StatusCode);
                        HttpContent content = response.Content;
                        Assert.IsType <ObjectContent <object> >(content);
                        ObjectContent <object> typedContent = (ObjectContent <object>)content;
                        Assert.Same(expectedContent, typedContent.Value);
                        Assert.Same(expectedOutputFormatter, typedContent.Formatter);
                        Assert.NotNull(typedContent.Headers);
                        Assert.Equal(expectedMediaType, typedContent.Headers.ContentType);
                        Assert.Same(expectedRequest, response.RequestMessage);
                    }
                }
            }
        }
Пример #15
0
        private ErrorMessageResult(string message, NegotiatedContentResult <HttpError> .IDependencyProvider dependencies)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            Contract.Assert(dependencies != null);

            _message      = message;
            _dependencies = dependencies;
        }
Пример #16
0
 /// <inheritdoc />
 public virtual Task <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
 {
     return(Task.FromResult(
                NegotiatedContentResult <T> .Execute(
                    HttpStatusCode.OK,
                    _content,
                    _dependencies.ContentNegotiator,
                    _dependencies.Request,
                    _dependencies.Formatters
                    )
                ));
 }
Пример #17
0
        public async Task ExecuteAsync_Returns_CorrectResponse_WhenContentNegotiationSucceeds()
        {
            // Arrange
            HttpStatusCode           expectedStatusCode = CreateStatusCode();
            object                   expectedContent    = CreateContent();
            MediaTypeFormatter       expectedFormatter  = CreateFormatter();
            MediaTypeHeaderValue     expectedMediaType  = CreateMediaType();
            ContentNegotiationResult negotiationResult  = new ContentNegotiationResult(
                expectedFormatter,
                expectedMediaType
                );

            using (HttpRequestMessage expectedRequest = CreateRequest())
            {
                IEnumerable <MediaTypeFormatter> expectedFormatters = CreateFormatters();

                Mock <IContentNegotiator> spy = new Mock <IContentNegotiator>();
                spy.Setup(n => n.Negotiate(typeof(object), expectedRequest, expectedFormatters))
                .Returns(negotiationResult);
                IContentNegotiator contentNegotiator = spy.Object;

                IHttpActionResult result = new NegotiatedContentResult <object>(
                    expectedStatusCode,
                    expectedContent,
                    contentNegotiator,
                    expectedRequest,
                    expectedFormatters
                    );

                // Act
                Task <HttpResponseMessage> task = result.ExecuteAsync(CancellationToken.None);

                // Assert
                Assert.NotNull(task);

                using (HttpResponseMessage response = await task)
                {
                    Assert.NotNull(response);
                    Assert.Equal(expectedStatusCode, response.StatusCode);
                    HttpContent            content      = response.Content;
                    ObjectContent <object> typedContent = Assert.IsType <ObjectContent <object> >(
                        content
                        );
                    Assert.Same(expectedContent, typedContent.Value);
                    Assert.Same(expectedFormatter, typedContent.Formatter);
                    Assert.NotNull(typedContent.Headers);
                    Assert.Equal(expectedMediaType, typedContent.Headers.ContentType);
                    Assert.Same(expectedRequest, response.RequestMessage);
                }
            }
        }
Пример #18
0
        private CreatedNegotiatedContentResult(Uri location, T content,
                                               NegotiatedContentResult <T> .IDependencyProvider dependencies)
        {
            if (location == null)
            {
                throw new ArgumentNullException("location");
            }

            Contract.Assert(dependencies != null);

            _location     = location;
            _content      = content;
            _dependencies = dependencies;
        }