public void Get_CreateStepTwo_Returns_ViewResult()
        {
            // arrange
            Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>();
            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            Mock<INotificationSender> notice = new Mock<INotificationSender>();
            ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object);

            // act
            var result = controller.CreateStepTwo(1, "a project", "abc123");

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            Assert.AreEqual("CreateStepTwo", ((ViewResult)result).ViewName);
        }
        public void Post_CreateStepTwo_ValidProject_RedirectsTo_Details()
        {
            // arrange
            ProjectEditModel viewModel = new ProjectEditModel();
            viewModel.SelectedScope = new int[0];

            Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>();
            service.Setup(s => s.Create(It.IsAny<BCModel.Projects.Project>())).Returns(true);
            service.Setup(s => s.GetUserProfile(It.IsAny<int>())).Returns(new BCModel.UserProfile { CompanyId = 1, UserId = 1 });

            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            security.Setup(s => s.GetUserId(It.IsAny<string>())).Returns(1);
            Mock<INotificationSender> notice = new Mock<INotificationSender>();
            ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object);

            Mock<IPrincipal> principal = new Mock<IPrincipal>();
            principal.Setup(p => p.Identity.Name).Returns("*****@*****.**");

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**");
            context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true);

            controller.ControllerContext = context.Object;

            // act
            var result = controller.CreateStepTwo(viewModel);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            Assert.AreEqual("Details", ((RedirectToRouteResult)result).RouteValues["action"]);
        }
        public void PostCreateStepTwoProjectValidationFailReturnsModelStateErrors()
        {
            // arrange
            ProjectEditModel viewModel = new ProjectEditModel();
            viewModel.SelectedScope = new int[0];

            Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>();
            service.Setup(s => s.Create(It.IsAny<BCModel.Projects.Project>())).Returns(false);
            service.Setup(s => s.GetUserProfile(It.IsAny<int>())).Returns(new BCModel.UserProfile { CompanyId = 1, UserId = 1 });
            service.SetupGet(s => s.ValidationDic).Returns(new Dictionary<string, string> { { "Duplicate", "Title already exists" } });

            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            security.Setup(s => s.GetUserId(It.IsAny<string>())).Returns(1);
            Mock<INotificationSender> notice = new Mock<INotificationSender>();
            ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object);

            Mock<IPrincipal> principal = new Mock<IPrincipal>();
            principal.Setup(p => p.Identity.Name).Returns("*****@*****.**");

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**");
            context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true);

            controller.ControllerContext = context.Object;

            // act
            var result = controller.CreateStepTwo(viewModel);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            Assert.AreEqual("CreateStepTwo", ((ViewResult)result).ViewName);
            Assert.IsTrue(((ViewResult)result).ViewData.ModelState.ContainsKey("Duplicate"));
            Assert.AreEqual("Title already exists", ((ViewResult)result).ViewData.ModelState["Duplicate"].Errors[0].ErrorMessage.ToString());
        }