using Admin.Classes.Commands.ImportProcessingRule; using Admin.Interfaces.Commands; using Admin.Interfaces.ModelBuilders; using log4net; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Web.Mvc; using Web.Mvc.Navigation; using Controller = Admin.Controllers.ImportProcessingRuleController; using ControllerDependencies = Admin.Controllers.ImportProcessingRuleControllerDependencies; using DetailsViewModel = Admin.Models.ImportProcessingRule.DetailsViewModel; using EditViewModel = Admin.Models.ImportProcessingRule.EditViewModel; using ListViewModel = Admin.Models.ImportProcessingRule.ListViewModel; namespace Admin.UnitTests.Controllers.ImportProcessingRule.List { [TestClass] [ExcludeFromCodeCoverage] public class Get { private readonly Type _controller = typeof(Controller); private readonly Mock> _mockDetailsViewModelBuilder = new Mock>(); private readonly Mock> _mockEditViewModelBuilder = new Mock>(); private readonly Mock> _mockCreateCommand = new Mock>(); private readonly Mock> _mockEditCommand = new Mock>(); private readonly Mock> _mockChangeStatusCommand = new Mock>(); private readonly Mock _mockLogger = new Mock(); private MethodInfo GetMethod() { return _controller.GetMethods() .Where(x => x.Name == "List") .FirstOrDefault(); } private ActionResult GetResult() { var listViewModelBuilder = new Mock>(); listViewModelBuilder.Setup(x => x.Build()).Returns(new ListViewModel()); var dependencies = new ControllerDependencies( _mockLogger.Object , _mockDetailsViewModelBuilder.Object , _mockEditViewModelBuilder.Object , listViewModelBuilder.Object , _mockCreateCommand.Object , _mockEditCommand.Object , _mockChangeStatusCommand.Object); var controller = new Controller(dependencies); return controller.List(); } [TestMethod] public void HasCorrectNumberOfCustomAttributes() { Assert.AreEqual(2, 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("Import Rules", namedArgument.TypedValue.Value); } [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 == "List"); } [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(ListViewModel)); } } }