public async Task Edit_Post_ModelIsInvalid_SetViewBagEmployees()
        {
            Mock <AnnualLeaveService> almock = new Mock <AnnualLeaveService>();

            almock.Setup(m => m.EditAsync(It.IsAny <AnnualLeaveDTO>())).Throws(new ValidationException("", ""));
            Mock <EmployeeService> emock = new Mock <EmployeeService>();

            emock.Setup(m => m.GetAllAsync()).ReturnsAsync(new EmployeeDTO[] {
                new EmployeeDTO()
                {
                    Id = 2, LastName = "Петров", FirstName = "Петр", Patronymic = "Петрович", Post = new PostDTO {
                        Department = new DepartmentDTO {
                            DepartmentName = "IT"
                        }
                    }
                }
            });
            AnnualLeaveController controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(new AnnualLeaveViewModel())) as ViewResult;

            SelectListItem item = (result.ViewBag.Employees as SelectList).FirstOrDefault();

            Assert.AreEqual("Петров Петр Петрович [IT]", item.Text);
            Assert.AreEqual("2", item.Value);
        }
        public async Task Edit_Post_ModelIsValid_RedirectToIndex()
        {
            Mock <AnnualLeaveService> mock       = new Mock <AnnualLeaveService>();
            AnnualLeaveController     controller = GetNewAnnualLeaveController(mock.Object, null);

            RedirectToRouteResult result = (await controller.Edit(new AnnualLeaveViewModel())) as RedirectToRouteResult;

            Assert.AreEqual("Index", result.RouteValues["action"]);
        }
        public async Task Edit_Get_ModelIsValid_AsksForEditView()
        {
            Mock <AnnualLeaveService> almock     = new Mock <AnnualLeaveService>();
            Mock <EmployeeService>    emock      = new Mock <EmployeeService>();
            AnnualLeaveController     controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(1)) as ViewResult;

            Assert.AreEqual("Edit", result.ViewName);
        }
        public async Task Edit_Post_ModelIsInvalid_AsksForEditView()
        {
            Mock <AnnualLeaveService> almock = new Mock <AnnualLeaveService>();

            almock.Setup(m => m.EditAsync(It.IsAny <AnnualLeaveDTO>())).Throws(new ValidationException("", ""));
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            AnnualLeaveController  controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(new AnnualLeaveViewModel())) as ViewResult;

            Assert.AreEqual("Edit", result.ViewName);
        }
        public async Task Edit_Get_ModelIsInvalid_AsksForErrorView()
        {
            Mock <AnnualLeaveService> almock = new Mock <AnnualLeaveService>();

            almock.Setup(m => m.FindByIdAsync(It.IsAny <int?>())).Throws(new ValidationException("FindByIdAsync method throws Exception", ""));
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            AnnualLeaveController  controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(1)) as ViewResult;

            Assert.AreEqual("Error", result.ViewName);
        }
        public async Task Edit_Get_ModelIsInvalid_RetrievesExceptionMessageFromModel()
        {
            Mock <AnnualLeaveService> almock = new Mock <AnnualLeaveService>();

            almock.Setup(m => m.FindByIdAsync(It.IsAny <int?>())).Throws(new ValidationException("FindByIdAsync method throws Exception", ""));
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            AnnualLeaveController  controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(1)) as ViewResult;

            string[] model = result.ViewData.Model as string[];
            Assert.AreEqual("FindByIdAsync method throws Exception", model[0]);
        }
        public async Task Edit_Post_ModelIsInvalid_RetrievesAnnualLeaveFromModel()
        {
            Mock <AnnualLeaveService> almock = new Mock <AnnualLeaveService>();

            almock.Setup(m => m.EditAsync(It.IsAny <AnnualLeaveDTO>())).Throws(new ValidationException("", ""));
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            AnnualLeaveController  controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(new AnnualLeaveViewModel {
                Id = 7
            })) as ViewResult;

            AnnualLeaveViewModel model = result.ViewData.Model as AnnualLeaveViewModel;

            Assert.AreEqual(7, model.Id);
        }
        public async Task Edit_Get_ModelIsValid_RetrievesAnnualLeaveFromModel()
        {
            Mock <AnnualLeaveService> almock = new Mock <AnnualLeaveService>();

            almock.Setup(m => m.FindByIdAsync(It.IsAny <int?>())).ReturnsAsync((int?_id) => new AnnualLeaveDTO {
                Id = _id.Value
            });
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            AnnualLeaveController  controller = GetNewAnnualLeaveController(almock.Object, emock.Object);

            ViewResult result = (await controller.Edit(7)) as ViewResult;

            AnnualLeaveViewModel model = result.ViewData.Model as AnnualLeaveViewModel;

            Assert.AreEqual(7, model.Id);
        }