using Admin.Controllers; using Admin.Interfaces.ModelBuilders; using Admin.Models.SystemMessage; using log4net; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Web.Mvc; using Controller = Admin.Controllers.HomeController; namespace Admin.UnitTests.Controllers.Home.Unauthorised { [TestClass] [ExcludeFromCodeCoverage] public class Get { private readonly Type _controller = typeof(Controller); private readonly Mock _mockLogger = new Mock(); private readonly Mock, string>> _mockListViewModelBuilder = new Mock, string>>(); private MethodInfo GetMethod() { return _controller.GetMethods() .Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(HttpGetAttribute))) .Where(x => x.Name == "Unauthorised") .FirstOrDefault(); } private ActionResult GetResult() { var dependencies = new HomeControllerDependencies(_mockLogger.Object, _mockListViewModelBuilder.Object); var controller = new Controller(dependencies); return controller.Unauthorised(); } [TestMethod] public void HasCorrectNumberOfCustomAttributes() { Assert.AreEqual(1, GetMethod().CustomAttributes.Count()); } [TestMethod] public void HasASingleHttpGetAttribute() { Assert.AreEqual(1, GetMethod().CustomAttributes.Where(ca => ca.AttributeType == typeof(HttpGetAttribute)).Count()); } [TestMethod] public void ReturnsAView() { var result = GetResult(); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(ViewResult)); } [TestMethod] public void ReturnsCorrectViewName() { var result = GetResult() as ViewResult; Assert.IsNotNull(result); Assert.IsTrue(string.IsNullOrEmpty(result.ViewName) || result.ViewName == "Unauthorised"); } } }