public ActionResult Create(User user)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    unitOfWork.UserRepository.InsertUser(user);
                    unitOfWork.Save();

                    TempData["DataUrl"] = "data-url=/User";
                    return RedirectToAction("Index");
                }
            }
            catch
            {
                ModelState.AddModelError(string.Empty, defaultErrorMessage);
            }
            return View("Create",user);
        }
        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_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_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);
        }
        public ActionResult DeleteConfirmed(FormCollection formCollection)
        {
            int userID = 0;
            Byte[] timestamp = new Byte[8];
            bool deleteConfirmed = false;

            User user = new User();

            try
            {
                foreach (string _formData in formCollection)
                {
                    switch (_formData)
                    {
                        case "UserToDeleteID":
                            userID = int.Parse(formCollection[_formData]);
                            break;
                        case "TimestampToDelete":
                            timestamp = Convert.FromBase64String(formCollection[_formData]);
                            break;
                        case "DeleteConfirmed":
                            deleteConfirmed = true;
                            break;
                    }
                }

                user = unitOfWork.UserRepository.GetUserByID(userID);

                if (user.IsDeleted == true)
                {
                    ModelState.AddModelError(string.Empty, "The record has been already deleted by another user. Click 'Back' button to come back to list.");
                    ViewBag.ButtonsDisabled = true;
                    return View("Edit", user);
                }

                if ((!user.Timestamp.SequenceEqual(timestamp)) && (!deleteConfirmed))
                {
                    ModelState.AddModelError(string.Empty, "The record was modified by another user. "
                        + "Please confirm the Delete operation or click the Back button.");
                    ViewBag.ButtonsDisabled = true;
                    ViewBag.ConfirmDeletionButton = true;
                    return View("Edit", user);
                }

                user.Timestamp = timestamp;

                unitOfWork.UserRepository.DeleteUser(user.UserID);
                unitOfWork.Save();

            }
            catch (DbUpdateConcurrencyException ex)
            {
                var entry = ex.Entries.Single();
                var databaseValues = (User)entry.GetDatabaseValues().ToObject();
                var clientValues = (User)entry.Entity;

                ModelState.AddModelError(string.Empty, "The record was modified by another user. "
                + "The current values have been displayed. "
                + "Please confirm the Delete operation or click the Back button.");

                user.Timestamp = databaseValues.Timestamp;

                return View("Edit", user);

            }
            catch
            {
                TempData["DataUrl"] = "data-url=/User";
                return RedirectToAction("Index", "User", new { errorOccurred = true });
            }

            TempData["DataUrl"] = "data-url=/User";
            return RedirectToAction("Index", "User");
        }
        public ActionResult Edit(User user)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    unitOfWork.UserRepository.UpdateUser(user);
                    unitOfWork.Save();

                    TempData["DataUrl"] = "data-url=/User";
                    return RedirectToAction("Index");
                }
            }
            catch (DbUpdateConcurrencyException ex)
            {
                var entry = ex.Entries.Single();
                var databaseValues = (User)entry.GetDatabaseValues().ToObject();
                var clientValues = (User)entry.Entity;

                if (databaseValues.IsDeleted == true)
                {
                    ModelState.AddModelError(string.Empty, "The record has been already deleted by another user. Click the Back button to come back to the list.");
                    ViewBag.ButtonsDisabled = true;
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "The record was modified by another user. "
                    + "Please confirm the Save operation or click the Back button.");

                    if (databaseValues.FirstName != clientValues.FirstName)
                        ModelState.AddModelError("FirstName", "Current value: " + databaseValues.FirstName);
                    if (databaseValues.LastName != clientValues.LastName)
                        ModelState.AddModelError("LastName", "Current value: " + databaseValues.LastName);
                    if (databaseValues.Email != clientValues.Email)
                        ModelState.AddModelError("Email", "Current value: " + databaseValues.Email);
                }

                user.Timestamp = databaseValues.Timestamp;

                return View("Edit", user);
            }
            catch
            {
                ModelState.AddModelError(string.Empty, defaultErrorMessage);
            }
            return View("Edit",user);
        }
 public void UpdateUser(User user)
 {
     user.DateModified = DateTime.Now;
     context.Entry(user).State = EntityState.Modified;
 }
 public void InsertUser(User user)
 {
     user.DateAdded = DateTime.Now;
     context.Users.Add(user);
 }