public void Index_SyncRequest_RetrievesAnnualLeavesPropertyFromModel()
        {
            Mock <AnnualLeaveService> mock = new Mock <AnnualLeaveService>();

            mock.Setup(m => m.GetPage(It.IsAny <IEnumerable <AnnualLeaveDTO> >(), It.IsAny <int>())).Returns(new AnnualLeaveDTO[] {
                new AnnualLeaveDTO {
                    Id = 7
                }
            });
            AnnualLeaveController controller = GetNewAnnualLeaveControllerWithControllerContext(mock.Object, null);

            ViewResult result = controller.Index(null, null) as ViewResult;

            AnnualLeaveListViewModel model = result.ViewData.Model as AnnualLeaveListViewModel;

            Assert.AreEqual(1, model.AnnualLeaves.Count());
            Assert.AreEqual(7, model.AnnualLeaves.FirstOrDefault().Id);
        }
        public void Index_SyncRequest_RetrievesPageInfoPropertyFromModel()
        {
            Mock <AnnualLeaveService> mock = new Mock <AnnualLeaveService>();

            mock.Setup(m => m.PageInfo).Returns(new PageInfo()
            {
                TotalItems = 9, PageSize = 3, PageNumber = 3
            });
            AnnualLeaveController controller = GetNewAnnualLeaveControllerWithControllerContext(mock.Object, null);

            ViewResult result = controller.Index(null, null) as ViewResult;

            AnnualLeaveListViewModel model = result.ViewData.Model as AnnualLeaveListViewModel;

            Assert.AreEqual(9, model.PageInfo.TotalItems);
            Assert.AreEqual(3, model.PageInfo.PageSize);
            Assert.AreEqual(3, model.PageInfo.PageNumber);
            Assert.AreEqual(3, model.PageInfo.TotalPages);
        }
        public ActionResult Index(AnnualLeaveFilter filter, string filterAsJsonString, int page = 1)
        {
            if (filterAsJsonString != null)
            {
                filter = System.Web.Helpers.Json.Decode <AnnualLeaveFilter>(filterAsJsonString);
            }
            IEnumerable <AnnualLeaveDTO> alDto = (_annualLeaveService as AnnualLeaveService).Get(filter); // Filter

            alDto = _annualLeaveService.GetPage(alDto, page);                                             // Paging
            InitializeMapper();
            IEnumerable <AnnualLeaveViewModel> annualLeaves = Mapper.Map <IEnumerable <AnnualLeaveDTO>, IEnumerable <AnnualLeaveViewModel> >(alDto);
            AnnualLeaveListViewModel           model        = new AnnualLeaveListViewModel {
                AnnualLeaves = annualLeaves,
                Filter       = filter,
                PageInfo     = _annualLeaveService.PageInfo
            };

            if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")
            {
                _logger.Info("Executed async request");
                var transformModel = new {
                    AnnualLeaves = model.AnnualLeaves.Select(al => new {
                        al.Id,
                        al.ScheduledNumberOfDays,
                        al.ActualNumberOfDays,
                        ScheduledDate = al.ScheduledDate.ToString("dd MMMM yyyy"),
                        ActualDate    = al.ActualDate.HasValue ? al.ActualDate.Value.ToString("dd MMMM yyyy") : "",
                        EmployeeName  = new System.Text.StringBuilder(al.Employee.LastName).Append(" ")
                                        .Append(al.Employee.FirstName).Append(" ").Append(al.Employee.Patronymic ?? "").ToString(),
                        PostTitle           = al.Employee.Post.Title,
                        NumberOfDaysOfLeave = al.Employee.Post.NumberOfDaysOfLeave,
                        DepartmentName      = al.Employee.Post.Department.DepartmentName
                    }).ToArray(),
                    model.Filter,
                    model.PageInfo
                };
                return(Json(transformModel, JsonRequestBehavior.AllowGet));
            }
            _logger.Info("Executed sync request");
            return(View("Index", model));
        }