using Admin.Classes.ViewModelBuilders.AccountHolder; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Web.Mvc; using Web.Mvc.Navigation; namespace Admin.UnitTests.Controllers.AccountHolder.Details { [TestClass] [ExcludeFromCodeCoverage] public class Get : TestBase { public Get() { SetupController(); } private MethodInfo GetMethod() { return GetMethod(typeof(HttpGetAttribute), nameof(Controller.Details)); } private ActionResult GetResult() { MockDetailsViewModelBuilder.Setup(x => x.Build(It.IsAny())).Returns(new Models.AccountHolder.DetailsViewModel()); var controllerContext = new Mock(); controllerContext.SetupGet(p => p.HttpContext.Session["AccountHolderController::IsAPaymentSearch"]).Returns(false); Controller.ControllerContext = controllerContext.Object; return Controller.Details("1"); } [TestMethod] public void HasCorrectNumberOfCustomAttributes() { Assert.AreEqual(3, GetMethod().CustomAttributes.Count()); } [TestMethod] public void HasASingleNavigatablePageActionFilterAttribute() { Assert.AreEqual(1, GetMethod().CustomAttributes.Where(ca => ca.AttributeType == typeof(NavigatablePageActionFilterAttribute)).Count()); } [TestMethod] public void NavigatablePageActionFilterAttributeHasCorrectDisplayText() { var attribute = GetMethod().CustomAttributes.Single(ca => ca.AttributeType == typeof(NavigatablePageActionFilterAttribute)); var namedArgument = attribute.NamedArguments.Where(x => x.MemberName == "DisplayText").First(); Assert.AreEqual("Account Holder Details", namedArgument.TypedValue.Value); } [TestMethod] public void HasASingleHttpGetAttribute() { Assert.AreEqual(1, GetMethod().CustomAttributes.Where(ca => ca.AttributeType == typeof(HttpGetAttribute)).Count()); } [TestMethod] public void HasASingleAuthorizeAttribute() { Assert.AreEqual(1, GetMethod().CustomAttributes.Where(ca => ca.AttributeType == typeof(Admin.Classes.Security.Attributes.AuthorizeAttribute)).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 == "Details"); } [TestMethod] public void ReturnsAViewModel() { var result = GetResult() as ViewResult; Assert.IsNotNull(result); Assert.IsNotNull(result.Model); } [TestMethod] public void ReturnsCorrectViewModelType() { var result = GetResult() as ViewResult; Assert.IsNotNull(result); Assert.IsInstanceOfType(result.Model, typeof(Models.AccountHolder.DetailsViewModel)); } } }