public void TestInitialize()
        {
            controller = new BusinessTripController();
            EfStorage storage = new EfStorage(new EfStorageDbInitializerTest());

            storage.Database.Initialize(true);
        }
        public async Task Edit_Post_ModelIsInvalid_SetViewBagEmployees()
        {
            Mock <BusinessTripService> bmock = new Mock <BusinessTripService>();

            bmock.Setup(m => m.EditAsync(It.IsAny <BusinessTripDTO>())).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"
                        }
                    }
                }
            });
            BusinessTripController controller = GetNewBusinessTripController(bmock.Object, emock.Object);

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

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

            Assert.AreEqual("Петров Петр Петрович [IT]", item.Text);
            Assert.AreEqual("2", item.Value);
        }
        public void Index_AsyncRequest_JsonRequestBehaviorEqualsAllowGet()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripControllerWithControllerContext(mock.Object, null, true);

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

            Assert.AreEqual(JsonRequestBehavior.AllowGet, result.JsonRequestBehavior);
        }
        public async Task Edit_Post_ModelIsValid_RedirectToIndex()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripController(mock.Object, null);

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

            Assert.AreEqual("Index", result.RouteValues["action"]);
        }
        public void Index_SyncRequest_AsksForIndexView()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripControllerWithControllerContext(mock.Object, null);

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

            Assert.AreEqual("Index", result.ViewName);
        }
        public async Task Delete_Get_ModelIsValid_AsksForDeleteView()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripController(mock.Object, null);

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

            Assert.AreEqual("Delete", result.ViewName);
        }
        public async Task DeleteAllConfirmed_Post_RedirectToIndex()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripController(mock.Object, null);

            RedirectToRouteResult result = (await controller.DeleteAllConfirmed()) as RedirectToRouteResult;

            Assert.AreEqual("Index", result.RouteValues["action"]);
        }
        public void DeleteAll_Get_AsksForDeleteAllView()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripController(mock.Object, null);

            ViewResult result = controller.DeleteAll() as ViewResult;

            Assert.AreEqual("DeleteAll", result.ViewName);
        }
        public async Task Edit_Get_ModelIsValid_AsksForEditView()
        {
            Mock <BusinessTripService> bmock      = new Mock <BusinessTripService>();
            Mock <EmployeeService>     emock      = new Mock <EmployeeService>();
            BusinessTripController     controller = GetNewBusinessTripController(bmock.Object, emock.Object);

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

            Assert.AreEqual("Edit", result.ViewName);
        }
        public void CanFilterTripsByProject()
        {
            //Arrange
            Mock <IBusinessTripRepository> mock = new Mock <IBusinessTripRepository>();

            mock.Setup(t => t.BusinessTrips).Returns(new BusinessTrip[]
            {
                new BusinessTrip {
                    BusinessTripID = 1, Project = new Project {
                        Symbol = "p1"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 2, Project = new Project {
                        Symbol = "p2"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 3, Project = new Project {
                        Symbol = "p2"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 4, Project = new Project {
                        Symbol = "p1"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 5, Project = new Project {
                        Symbol = "p1"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 6, Project = new Project {
                        Symbol = "p3"
                    }
                }
            }.AsQueryable());

            BusinessTripController controller = new BusinessTripController(mock.Object);

            controller.PageSize = 6;

            //Act
            BusinessTripViewModel result1 = controller.List("p1").ViewData.Model as BusinessTripViewModel;
            BusinessTripViewModel result2 = controller.List("p2").ViewData.Model as BusinessTripViewModel;

            BusinessTrip[] tripArraP1 = result1.BusinessTrips.ToArray();
            BusinessTrip[] tripArraP2 = result2.BusinessTrips.ToArray();

            //Assert
            Assert.Equal(3, tripArraP1.Length);
            Assert.Equal(2, tripArraP2.Length);
            Assert.Equal(1, tripArraP1[0].BusinessTripID);
        }
        public async Task Delete_Get_ModelIsInvalid_AsksForErrorView()
        {
            Mock <BusinessTripService> mock = new Mock <BusinessTripService>();

            mock.Setup(m => m.FindByIdAsync(It.IsAny <int?>())).Throws(new ValidationException("FindByIdAsync method throws Exception", ""));
            BusinessTripController controller = GetNewBusinessTripController(mock.Object, null);

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

            Assert.AreEqual("Error", result.ViewName);
        }
        public async Task ExportJson_RedirectToIndex()
        {
            Mock <BusinessTripService> mock       = new Mock <BusinessTripService>();
            BusinessTripController     controller = GetNewBusinessTripControllerWithControllerContext(mock.Object, null);

            FilePathResult result = (await controller.ExportJson()) as FilePathResult;

            Assert.AreEqual("application/json", result.ContentType);
            Assert.AreEqual("BusinessTrips.json", result.FileDownloadName);
            Assert.AreEqual("./DiplomMSSQLApp.WEB/Results/BusinessTrips.json", result.FileName);
        }
        public async Task Create_Get_NoEmployees_AsksForErrorView()
        {
            Mock <EmployeeService> mock = new Mock <EmployeeService>();

            mock.Setup(m => m.CountAsync()).ReturnsAsync(0);
            BusinessTripController controller = GetNewBusinessTripController(null, mock.Object);

            ViewResult result = (await controller.Create()) as ViewResult;

            Assert.AreEqual("Error", result.ViewName);
        }
        public async Task Edit_Post_ModelIsInvalid_AsksForEditView()
        {
            Mock <BusinessTripService> bmock = new Mock <BusinessTripService>();

            bmock.Setup(m => m.EditAsync(It.IsAny <BusinessTripDTO>())).Throws(new ValidationException("", ""));
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            BusinessTripController controller = GetNewBusinessTripController(bmock.Object, emock.Object);

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

            Assert.AreEqual("Edit", result.ViewName);
        }
        public async Task Delete_Get_ModelIsInvalid_RetrievesExceptionMessageFromModel()
        {
            Mock <BusinessTripService> mock = new Mock <BusinessTripService>();

            mock.Setup(m => m.FindByIdAsync(It.IsAny <int?>())).Throws(new ValidationException("FindByIdAsync method throws Exception", ""));
            BusinessTripController controller = GetNewBusinessTripController(mock.Object, null);

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

            string[] model = result.ViewData.Model as string[];
            Assert.AreEqual("FindByIdAsync method throws Exception", model[0]);
        }
        public void CanSendPaginationViewModel()
        {
            //Arrange
            Mock <IBusinessTripRepository> mock = new Mock <IBusinessTripRepository>();

            mock.Setup(t => t.BusinessTrips).Returns(new BusinessTrip[]
            {
                new BusinessTrip {
                    BusinessTripID = 1, Destination = new Destination {
                        Name = "d1"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 2, Destination = new Destination {
                        Name = "d2"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 3, Destination = new Destination {
                        Name = "d3"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 4, Destination = new Destination {
                        Name = "d4"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 5, Destination = new Destination {
                        Name = "d5"
                    }
                }
            }.AsQueryable());

            BusinessTripController controller = new BusinessTripController(mock.Object);

            //Act
            BusinessTripViewModel result = controller.List(null, 2).ViewData.Model as BusinessTripViewModel;

            //Assert
            PagingInfo pagingInfo = result.PagingInfo;

            Assert.Equal(2, pagingInfo.CurrentPage);
            Assert.Equal(2, pagingInfo.ItemsPerPage);
            Assert.Equal(5, pagingInfo.TotalItems);
            Assert.Equal(3, pagingInfo.TotalPages);
        }
        public async Task Delete_Get_ModelIsValid_RetrievesBusinessTripFromModel()
        {
            Mock <BusinessTripService> mock = new Mock <BusinessTripService>();

            mock.Setup(m => m.FindByIdAsync(It.IsAny <int?>())).ReturnsAsync((int?_id) => new BusinessTripDTO {
                Id   = _id.Value,
                Name = "02.09.2018_026"
            });
            BusinessTripController controller = GetNewBusinessTripController(mock.Object, null);

            ViewResult result = (await controller.Delete(2)) as ViewResult;

            BusinessTripViewModel model = result.ViewData.Model as BusinessTripViewModel;

            Assert.AreEqual(2, model.Id);
            Assert.AreEqual("02.09.2018_026", model.Name);
        }
        public async Task Edit_Post_ModelIsInvalid_RetrievesBusinessTripFromModel()
        {
            Mock <BusinessTripService> bmock = new Mock <BusinessTripService>();

            bmock.Setup(m => m.EditAsync(It.IsAny <BusinessTripDTO>())).Throws(new ValidationException("", ""));
            Mock <EmployeeService> emock      = new Mock <EmployeeService>();
            BusinessTripController controller = GetNewBusinessTripController(bmock.Object, emock.Object);

            ViewResult result = (await controller.Edit(new BusinessTripViewModel {
                Id = 2,
                Name = "02.09.2018_026"
            })) as ViewResult;

            BusinessTripViewModel model = result.ViewData.Model as BusinessTripViewModel;

            Assert.AreEqual(2, model.Id);
            Assert.AreEqual("02.09.2018_026", model.Name);
        }
        public void Index_SyncRequest_RetrievesPageInfoPropertyFromModel()
        {
            Mock <BusinessTripService> mock = new Mock <BusinessTripService>();

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

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

            BusinessTripListViewModel model = result.ViewData.Model as BusinessTripListViewModel;

            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 void Index_AsyncRequest_RetrievesBusinessTripsPropertyFromModel()
        {
            Mock <BusinessTripService> mock = new Mock <BusinessTripService>();

            mock.Setup(m => m.GetPage(It.IsAny <IEnumerable <BusinessTripDTO> >(), It.IsAny <int>())).Returns(new BusinessTripDTO[] {
                new BusinessTripDTO {
                    Id   = 1,
                    Name = "02.09.2018_026"
                }
            });
            BusinessTripController controller = GetNewBusinessTripControllerWithControllerContext(mock.Object, null, true);

            JsonResult result       = controller.Index(null, null) as JsonResult;
            object     businessTrip = (result.Data.GetType().GetProperty("BusinessTrips").GetValue(result.Data) as object[])[0];
            int        id           = (int)businessTrip.GetType().GetProperty("Id").GetValue(businessTrip);
            string     code         = businessTrip.GetType().GetProperty("Code").GetValue(businessTrip).ToString();

            Assert.AreEqual(1, id);
            Assert.AreEqual("02.09.2018_026", code);
        }
        public void Index_SyncRequest_RetrievesBusinessTripsPropertyFromModel()
        {
            Mock <BusinessTripService> mock = new Mock <BusinessTripService>();

            mock.Setup(m => m.GetPage(It.IsAny <IEnumerable <BusinessTripDTO> >(), It.IsAny <int>())).Returns(new BusinessTripDTO[] {
                new BusinessTripDTO {
                    Id   = 1,
                    Name = "02.09.2018_026"
                }
            });
            BusinessTripController controller = GetNewBusinessTripControllerWithControllerContext(mock.Object, null);

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

            BusinessTripListViewModel model = result.ViewData.Model as BusinessTripListViewModel;

            Assert.AreEqual(1, model.BusinessTrips.Count());
            Assert.AreEqual(1, model.BusinessTrips.FirstOrDefault().Id);
            Assert.AreEqual("02.09.2018_026", model.BusinessTrips.FirstOrDefault().Name);
        }
        public async Task Create_Get_ExistsEmployees_SetViewBagEmployees()
        {
            Mock <EmployeeService> mock = new Mock <EmployeeService>();

            mock.Setup(m => m.CountAsync()).ReturnsAsync(1);
            mock.Setup(m => m.GetAllAsync()).ReturnsAsync(new EmployeeDTO[] {
                new EmployeeDTO()
                {
                    Id = 2, LastName = "Петров", FirstName = "Петр", Patronymic = "Петрович", Post = new PostDTO {
                        Department = new DepartmentDTO {
                            DepartmentName = "IT"
                        }
                    }
                }
            });
            BusinessTripController controller = GetNewBusinessTripController(null, mock.Object);

            ViewResult result = (await controller.Create()) as ViewResult;

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

            Assert.AreEqual("Петров Петр Петрович [IT]", item.Text);
            Assert.AreEqual("2", item.Value);
        }
예제 #23
0
        public void SetUp()
        {
            mock          = Mock_Repository.CreateMock();
            messengerMock = new Mock <IMessenger>();

            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.UnknownType))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCCancelsConfirmedReportedToADM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCCancelsConfirmedReportedToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCCancelsConfirmedReportedToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCCancelsConfirmedReportedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCModifiesConfirmedReportedToADM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCModifiesConfirmedReportedToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCModifiesConfirmedReportedToDIR))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCModifiesConfirmedReportedToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsConfirmedOrConfirmedModifiedToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsConfirmedOrConfirmedModifiedToDIR))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsConfirmedOrConfirmedModifiedToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsConfirmedOrConfirmedModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsConfirmedOrConfirmedModifiedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsRegisteredOrRegisteredModifiedToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsRegisteredOrRegisteredModifiedToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsRegisteredOrRegisteredModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMConfirmsPlannedOrRegisteredToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMConfirmsPlannedOrRegisteredToDIR))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMConfirmsPlannedOrRegisteredToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMConfirmsPlannedOrRegisteredToResponsible))).Verifiable();
            //messengerMock.Setup(m => m.Notify(It.Is<IMessage>(msg => msg.messageType == MessageType.ADMConfirmsPlannedOrRegisteredToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMRegistersPlannedOrPlannedModifiedToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMRegistersPlannedOrPlannedModifiedToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMRegistersPlannedOrPlannedModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMReplansRegisteredOrRegisteredModifiedToBTM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMReplansRegisteredOrRegisteredModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMRejectsConfirmedOrConfirmedModifiedToADM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMRejectsConfirmedOrConfirmedModifiedToEMP))).Verifiable();
            //messengerMock.Setup(m => m.Notify(It.Is<IMessage>(msg => msg.messageType == MessageType.BTMRejectsConfirmedOrConfirmedModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMRejectsRegisteredOrRegisteredModifiedToADM))).Verifiable();
            //messengerMock.Setup(m => m.Notify(It.Is<IMessage>(msg => msg.messageType == MessageType.BTMRejectsRegisteredOrRegisteredModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMReportsConfirmedOrConfirmedModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMReportsConfirmedOrConfirmedModifiedToEMP))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMUpdatesConfirmedOrConfirmedModifiedToEMP))).Verifiable();
            //messengerMock.Setup(m => m.Notify(It.Is<IMessage>(msg => msg.messageType == MessageType.BTMUpdatesConfirmedOrConfirmedModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.DIRRejectsConfirmedToADM))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.DIRRejectsConfirmedToEMP))).Verifiable();
            //messengerMock.Setup(m => m.Notify(It.Is<IMessage>(msg => msg.messageType == MessageType.DIRRejectsConfirmedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsPlannedModifiedToBTM))).Verifiable();
            //messengerMock.Setup(m => m.Notify(It.Is<IMessage>(msg => msg.messageType == MessageType.ADMCancelsPlannedModifiedToACC))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMConfirmsPlannedOrRegisteredToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ADMCancelsConfirmedOrConfirmedModifiedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCCancelsConfirmedReportedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMRejectsConfirmedOrConfirmedModifiedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.DIRRejectsConfirmedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMUpdatesConfirmedOrConfirmedModifiedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.BTMReportsConfirmedOrConfirmedModifiedToResponsible))).Verifiable();
            messengerMock.Setup(m => m.Notify(It.Is <IMessage>(msg => msg.messageType == MessageType.ACCModifiesConfirmedReportedToResponsible))).Verifiable();

            HttpContext.Current = new HttpContext(new HttpRequest("", "http://localhost:50616", ""), new HttpResponse(new StringWriter()));
            var routeCollection = new RouteCollection();

            if (RouteTable.Routes.Count == 0)
            {
                routeCollection.MapRoute("Default", "Home/Index");
                System.Web.Routing.RouteTable.Routes.MapRoute("Default", "Home/Index");
            }

            var fakeHttpContext = new Mock <HttpContextBase>();
            var fakeIdentity    = new GenericIdentity("User");
            var principal       = new GenericPrincipal(fakeIdentity, null);

            fakeHttpContext.Setup(t => t.User).Returns(principal);
            controllerContext = new Mock <ControllerContext>();
            controllerContext.Setup(t => t.HttpContext).Returns(fakeHttpContext.Object);

            controller = new BusinessTripController(mock.Object, messengerMock.Object);
            controller.ControllerContext = controllerContext.Object;
        }
        public void CanPaginate()
        {
            //Arrange
            Mock <IBusinessTripRepository> mock = new Mock <IBusinessTripRepository>();

            mock.Setup(t => t.BusinessTrips).Returns((new BusinessTrip[] {
                new BusinessTrip {
                    BusinessTripID = 1, Destination = new Destination {
                        Name = "d1"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 2, Destination = new Destination {
                        Name = "d2"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 3, Destination = new Destination {
                        Name = "d3"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 4, Destination = new Destination {
                        Name = "d4"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 5, Destination = new Destination {
                        Name = "d5"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 6, Destination = new Destination {
                        Name = "d6"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 7, Destination = new Destination {
                        Name = "d7"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 8, Destination = new Destination {
                        Name = "d8"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 9, Destination = new Destination {
                        Name = "d9"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 10, Destination = new Destination {
                        Name = "d10"
                    }
                },
                new BusinessTrip {
                    BusinessTripID = 11, Destination = new Destination {
                        Name = "d11"
                    }
                }
            }).AsQueryable <BusinessTrip>());

            BusinessTripController controller = new BusinessTripController(mock.Object);

            controller.PageSize = 10;

            //Act
            BusinessTripViewModel firstPageResult =
                controller.List(null, 1).ViewData.Model as BusinessTripViewModel;
            BusinessTripViewModel secondPageResult =
                controller.List(null, 2).ViewData.Model as BusinessTripViewModel;

            //Assert
            BusinessTrip[] firstPageTripsArray  = firstPageResult.BusinessTrips.ToArray();
            BusinessTrip[] secondPageTripsArray = secondPageResult.BusinessTrips.ToArray();

            Assert.True(firstPageTripsArray.Length == 10);
            Assert.True(secondPageTripsArray.Length == 1);

            Assert.Equal("d1", firstPageTripsArray[0].Destination.Name);
            Assert.Equal("d10", firstPageTripsArray[9].Destination.Name);
            Assert.Equal("d11", secondPageTripsArray[0].Destination.Name);
        }