// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #if DNX451 using System.IO; using System.Threading.Tasks; using Microsoft.AspNet.Http; using Microsoft.AspNet.Http.Internal; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Routing; using Microsoft.Framework.Logging; using Microsoft.Framework.OptionsModel; using Moq; using Xunit; namespace System.Web.Http { public class BadRequestErrorMessageResultTest { [Fact] public async Task BadRequestErrorMessageResult_SetsStatusCode() { // Arrange var httpContext = new DefaultHttpContext(); httpContext.RequestServices = CreateServices(); var stream = new MemoryStream(); httpContext.Response.Body = stream; var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var result = new BadRequestErrorMessageResult("Error"); // Act await result.ExecuteResultAsync(context); // Assert Assert.Equal(StatusCodes.Status400BadRequest, context.HttpContext.Response.StatusCode); } [Fact] public async Task BadRequestErrorMessageResult_WritesHttpError() { // Arrange var httpContext = new DefaultHttpContext(); httpContext.RequestServices = CreateServices(); var stream = new MemoryStream(); httpContext.Response.Body = stream; var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var result = new BadRequestErrorMessageResult("Error"); // Act await result.ExecuteResultAsync(context); // Assert using (var reader = new StreamReader(stream)) { stream.Seek(0, SeekOrigin.Begin); var content = reader.ReadToEnd(); Assert.Equal("{\"Message\":\"Error\"}", content); } } private IServiceProvider CreateServices() { var services = new Mock(MockBehavior.Strict); var options = new MvcOptions(); options.OutputFormatters.Add(new JsonOutputFormatter()); var optionsAccessor = new Mock>(); optionsAccessor.SetupGet(o => o.Options) .Returns(options); var mockActionBindingContext = new Mock>(); var bindingContext = new ActionBindingContext { OutputFormatters = options.OutputFormatters }; mockActionBindingContext .SetupGet(o => o.Value) .Returns(bindingContext); services.Setup(o => o.GetService(typeof(IScopedInstance))) .Returns(mockActionBindingContext.Object); services.Setup(s => s.GetService(typeof(IOptions))) .Returns(optionsAccessor.Object); services.Setup(s => s.GetService(typeof(ILogger))) .Returns(new Mock>().Object); return services.Object; } } } #endif