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; }
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); } } } }
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); } } }
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); } } }
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); } }
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)); }
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." ); } }
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); } }
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." ); } }
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)); }
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); } } } }
private ErrorMessageResult(string message, NegotiatedContentResult <HttpError> .IDependencyProvider dependencies) { if (message == null) { throw new ArgumentNullException("message"); } Contract.Assert(dependencies != null); _message = message; _dependencies = dependencies; }
/// <inheritdoc /> public virtual Task <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { return(Task.FromResult( NegotiatedContentResult <T> .Execute( HttpStatusCode.OK, _content, _dependencies.ContentNegotiator, _dependencies.Request, _dependencies.Formatters ) )); }
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); } } }
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; }