public void TestCreate_ReturnCreateView()
        {
            // Arrange
            IUnitOfWork unitOfWork = new UnitOfWork();
            UserController target = new UserController(unitOfWork);

            // Act
            ViewResult actual = target.Create();

            // Assert
            Assert.AreEqual("Create", actual.ViewName);
        }
        public void TestCreate_WhenModelError_TooLongStrings_ReturnCreateView()
        {
            // Arrange
            IUnitOfWork unitOfWork = new UnitOfWork();
            UserController target = new UserController(unitOfWork);

            User user = new User()
            {
                Email = "*****@*****.**",
                FirstName = "longfirstnamelongfirstnamelongfirstnamelongfirstnamelongfirstname",
                LastName = "longlastnamelonglastnamelonglastnamelonglastnamelonglastnamelonglastname"
            };

            // Act
            ViewResult actual = target.Create(user) as ViewResult;

            // Assert
            Assert.IsFalse(target.ModelState.IsValid);
            Assert.IsTrue(user.UserID == 0);
            Assert.AreEqual("Create", actual.ViewName);
        }
        public void TestCreate_WhenNoError_InsertUserAndReturnIndexView()
        {
            // Arrange
            IUnitOfWork unitOfWork = new UnitOfWork();
            UserController target = new UserController(unitOfWork);

            var newUser = userRepository.GetUserByID(1);

            User user = new User()
            {
                Email = "*****@*****.**",
                FirstName = "FirstName1",
                LastName = "LastName1"
            };

            // Act
            RedirectToRouteResult actual = target.Create(user) as RedirectToRouteResult;

            // Assert
            Assert.IsTrue(user.UserID != 0);
            Assert.IsTrue(target.ModelState.IsValid);

            Assert.IsNotNull(user.DateAdded);
            Assert.IsNull(user.DateModified);
            Assert.IsNull(user.IsDeleted);

            Assert.AreEqual(user.FirstName, newUser.FirstName);
            Assert.AreEqual(user.LastName, newUser.LastName);
            Assert.AreEqual(user.Email, newUser.Email);

            Assert.AreEqual("Index", actual.RouteValues["action"]);
        }
        public void TestCreate_WhenModelError_InvalidEmail_ReturnCreateView()
        {
            // Arrange
            IUnitOfWork unitOfWork = new UnitOfWork();
            UserController target = new UserController(unitOfWork);

            User user = new User()
            {
                Email = "notvalid@[email protected]",
                FirstName = "FirstName1",
                LastName = "LastName1"
            };

            // Act
            ViewResult actual = target.Create(user) as ViewResult;

            // Assert
            Assert.IsFalse(target.ModelState.IsValid);
            Assert.IsTrue(user.UserID == 0);
            Assert.AreEqual("Create", actual.ViewName);
        }