public ViewResult List(string type, int page = 1) { ToursListViewModel model = new ToursListViewModel { Tours = repository.GetAllTours() .Where(b => type == null || b.Type == type) .OrderBy(tour => tour.TourId) .Skip((page - 1) * pageSize) .Take(pageSize), PagingInfo = new PagingInfo { CurrentPage = page, ItemsPerPage = pageSize, TotalItems = type == null? repository.GetAllTours().Count() : repository.GetAllTours().Where(tour => tour.Type == type).Count() }, CurrentType = type }; return(View(model)); }
public void Can_Send_Pagination_View_Model() { // Организация (arrange) Mock <ITourRepository> mock = new Mock <ITourRepository>(); mock.Setup(m => m.GetAllTours()).Returns(new List <Tour> { new Tour { TourId = 1, Name = "Tour1" }, new Tour { TourId = 2, Name = "Tour2" }, new Tour { TourId = 3, Name = "Tour3" }, new Tour { TourId = 4, Name = "Tour4" }, new Tour { TourId = 5, Name = "Tour5" } }); ToursController controller = new ToursController(mock.Object); controller.pageSize = 3; // Действие (act) ToursListViewModel result = (ToursListViewModel)controller.List(null, 2).Model; PagingInfo pagingInfo = result.PagingInfo; Assert.AreEqual(pagingInfo.CurrentPage, 2); Assert.AreEqual(pagingInfo.ItemsPerPage, 3); Assert.AreEqual(pagingInfo.TotalItems, 5); Assert.AreEqual(pagingInfo.TotalPages, 2); }
public void Can_Paginate() { // Организация (arrange) Mock <ITourRepository> mock = new Mock <ITourRepository>(); mock.Setup(m => m.GetAllTours()).Returns(new List <Tour> { new Tour { TourId = 1, Name = "Tour1" }, new Tour { TourId = 2, Name = "Tour2" }, new Tour { TourId = 3, Name = "Tour3" }, new Tour { TourId = 4, Name = "Tour4" }, new Tour { TourId = 5, Name = "Tour5" } }); ToursController controller = new ToursController(mock.Object); controller.pageSize = 3; // Действие (act) ToursListViewModel result = (ToursListViewModel)controller.List(null, 2).Model; // Утверждение (assert) List <Tour> tours = result.Tours.ToList(); Assert.IsTrue(tours.Count == 2); Assert.AreEqual(tours[0].Name, "Tour4"); Assert.AreEqual(tours[1].Name, "Tour5"); }
public async Task <ActionResult <ToursViewModel> > Post2([FromBody] ToursListViewModel parameters) { var filtersList = GetListFilters(_context); // list існуючих фільтрів long[] filterValueSearchList = parameters.Filters; //масив ID вибраних фільтрів var url = _configuration.GetValue <string>("ImagesHotelUrl"); int page = parameters.CurrentPage; int pageSize = 4; int pageNo = page - 1; ToursViewModel model = new ToursViewModel(); var query = _context .Tours .Include(s => s.RoomType) .Include(s => s.RoomType.Hotel) //.ThenInclude(hotel => hotel.Name) .Include(d => d.RoomType.Hotel.Region) //.ThenInclude(region => region.Name) .Include(f => f.RoomType.Hotel.Region.Country) //.ThenInclude(country => country.Name) .Include(s => s.RoomType.Hotel.HotelImages) .Include(z => z.CityDeparture) //.ThenInclude(city => city.Name) .Include(t => t.Filtres) .AsQueryable(); if (parameters.Filters.Length != 0) { foreach (var fName in filtersList) { int countFilter = 0; //Кількість співпадінь у даній групі фільтрів var predicate = PredicateBuilder.False <Tour>(); foreach (var fValue in fName.Children) { for (int i = 0; i < filterValueSearchList.Length; i++) { var idV = fValue.Id; if (filterValueSearchList[i] == idV) { predicate = predicate .Or(p => p.Filtres .Any(f => f.FilterValueId == idV)); countFilter++; } } } if (countFilter != 0) { query = query.Where(predicate); } } } if (!String.IsNullOrEmpty(parameters.SearchString)) { query = query.Where(s => s.RoomType.Hotel.Name.Contains(parameters.SearchString) || s.RoomType.Hotel.Region.Name.Contains(parameters.SearchString)); } switch (parameters.SortOrder) { case "name": query = query.OrderBy(c => c.RoomType.Hotel.Name); break; case "name_desc": query = query.OrderByDescending(c => c.RoomType.Hotel.Name); break; case "rate": query = query.OrderBy(c => c.RoomType.Hotel.Rate); break; case "rate_desc": query = query.OrderByDescending(c => c.RoomType.Hotel.Rate); break; default: query = query.OrderBy(c => c.RoomType.Hotel.Name); break; } int count = query.Count(); var result = await query.Select(u => new TourListViewModel { Id = u.Id, СityDeparture = u.CityDeparture.Name, Name = u.RoomType.Hotel.Name, HotelNormalizedName = u.RoomType.Hotel.NormalizedName, Region = u.RoomType.Hotel.Region.Name, Country = u.RoomType.Hotel.Region.Country.Name, CountryNormalizedName = u.RoomType.Hotel.Region.Country.NormalizedName, Description = u.RoomType.Hotel.Description, Price = u.Price, Rate = u.RoomType.Hotel.Rate, Class = u.RoomType.Hotel.Class, HotelFood = u.RoomType.Hotel.HotelFood.Name, FromData = u.FromData, Date = u.FromData.ToString(), DaysCount = u.DaysCount, Discount = u.Discount, DiscountPrice = u.DiscountPrice, PlaceCount = u.RoomType.PlacesCount, ImagePath = u.RoomType.Hotel.HotelImages.FirstOrDefault(f => f.HotelId == u.RoomType.HotelId) == null ? Path.Combine(_url, "no-photo.jpg") : Path.Combine(_url, u.RoomType.Hotel.NormalizedName, "1200_" + u.RoomType.Hotel.HotelImages.FirstOrDefault( f => f.HotelId == u.RoomType.HotelId).HotelImageUrl) }) .Skip(pageNo * pageSize) .Take(pageSize).ToListAsync(); model.Tours = result; model.TotalPages = (int)Math.Ceiling((double)count / pageSize); model.CurrentPage = page; model.CountItem = count; return(Ok(model)); }