From 80ef37ab0a4ef1de2619f80d72188a1cd008bdfb Mon Sep 17 00:00:00 2001 From: YishaiGalatzer Date: Thu, 9 Oct 2014 18:18:03 -0700 Subject: [PATCH] Add unit tests to controller properties --- .../ControllerTests.cs | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/ControllerTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/ControllerTests.cs index 2a2768bc25..326c56cebc 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/ControllerTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/ControllerTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -9,6 +10,7 @@ using System.Reflection; using Microsoft.AspNet.Http; using Microsoft.AspNet.Mvc.ModelBinding; +using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Routing; using Microsoft.AspNet.Testing; #if ASPNET50 @@ -805,9 +807,176 @@ public async Task TryUpdateModel_UsesModelValueProviderIfSpecified() } #endif + [Fact] + public void ControllerExposes_RequestServices() + { + // Arrange + var controller = new Controller(); + + var serviceProvider = Mock.Of(); + var httpContext = new Mock(); + httpContext.Setup(c => c.RequestServices) + .Returns(serviceProvider); + + controller.ActionContext = new ActionContext(httpContext.Object, + Mock.Of(), + new ActionDescriptor()); + + // Act + var innerServiceProvider = controller.Resolver; + + // Assert + Assert.Same(serviceProvider, innerServiceProvider); + } + + [Fact] + public void ControllerExposes_Request() + { + // Arrange + var controller = new Controller(); + + var request = Mock.Of(); + var httpContext = new Mock(); + httpContext.Setup(c => c.Request) + .Returns(request); + + controller.ActionContext = new ActionContext(httpContext.Object, + Mock.Of(), + new ActionDescriptor()); + + // Act + var innerRequest = controller.Request; + + // Assert + Assert.Same(request, innerRequest); + } + + [Fact] + public void ControllerExposes_Response() + { + // Arrange + var controller = new Controller(); + + var response = Mock.Of(); + var httpContext = new Mock(); + httpContext.Setup(c => c.Response) + .Returns(response); + + controller.ActionContext = new ActionContext(httpContext.Object, + Mock.Of(), + new ActionDescriptor()); + + // Act + var innerResponse = controller.Response; + + // Assert + Assert.Same(response, innerResponse); + } + + [Fact] + public void ControllerExposes_RouteData() + { + // Arrange + var controller = new Controller(); + + var routeData = Mock.Of(); + + controller.ActionContext = new ActionContext(Mock.Of(), + routeData, + new ActionDescriptor()); + + // Act + var innerRouteData = controller.RouteData; + + // Assert + Assert.Same(routeData, innerRouteData); + } + + [Fact] + public void ControllerDispose_CallsDispose() + { + // Arrange + var controller = new DisposableController(); + + // Act + controller.Dispose(); + + // Assert + Assert.True(controller.DisposeCalled); + } + + [Fact] + public void ControllerExpose_ViewEngine() + { + // Arrange + var controller = new Controller(); + + var viewEngine = Mock.Of(); + + var serviceProvider = new Mock(); + serviceProvider + .Setup(s => s.GetService(It.Is(t => t == typeof(ICompositeViewEngine)))) + .Returns(viewEngine); + + var httpContext = new Mock(); + httpContext + .Setup(c => c.RequestServices) + .Returns(serviceProvider.Object); + + controller.ActionContext = new ActionContext(httpContext.Object, + Mock.Of(), + new ActionDescriptor()); + + // Act + var innerViewEngine = controller.ViewEngine; + + // Assert + Assert.Same(viewEngine, innerViewEngine); + } + + [Fact] + public void ControllerView_UsesControllerViewEngine() + { + // Arrange + var controller = new Controller(); + + var viewEngine = Mock.Of(); + + var serviceProvider = new Mock(); + serviceProvider + .Setup(s => s.GetService(It.Is(t => t == typeof(ICompositeViewEngine)))) + .Returns(viewEngine); + + var httpContext = new Mock(); + httpContext + .Setup(c => c.RequestServices) + .Returns(serviceProvider.Object); + + controller.ActionContext = new ActionContext(httpContext.Object, + Mock.Of(), + new ActionDescriptor()); + + // Act + var unsused = controller.ViewEngine; + var result = controller.View(); + + // Assert + Assert.Same(viewEngine, result.ViewEngine); + } + private class MyModel { public string Foo { get; set; } } + + private class DisposableController : Controller + { + public bool DisposeCalled { get; private set; } + + protected override void Dispose(bool disposing) + { + DisposeCalled = true; + } + } } }