public async Task <IActionResult> Search(int id, [FromQuery] BarSearchViewModel vm) { var allCities = (await cityServices.GetAllDTOAsync()); vm.AllCities = new List <SelectListItem>(); vm.AllCities.Add(new SelectListItem("Select...", "")); allCities.ForEach(c => vm.AllCities.Add(new SelectListItem(c.Name, c.Id.ToString()))); if (string.IsNullOrEmpty(vm.NameKey) && vm.MinRating == null && vm.CityId == null) { return(View(vm)); } var dto = new BarSearchDTO { NameKey = vm.NameKey, CityId = vm.CityId, MinRating = vm.MinRating }; vm.Paging.Count = await barServices.SerchResultCountAsync(dto); vm.Paging.ItemsPerPage = itemsPerPage; vm.Paging.CurrentPage = id == 0 ? 1 : id; vm.Result = (await barServices.SearchAsync(dto, itemsPerPage, vm.Paging.CurrentPage)) .Select(b => b.MapToViewModel()); return(View(vm)); }
public async Task <List <BarInListDTO> > SearchAsync(BarSearchDTO dto, int itemsPerPage, int currentPage) { var resultDTO = await context.Bars .Include(b => b.Address) .ThenInclude(a => a.City) .Include(b => b.BarReviews) .Include(b => b.BarReviews) .FilterByName(dto.NameKey) .FilterByCity(dto.CityId) .FilterByRating(dto.MinRating) .Select(bar => new BarInListDTO { Id = bar.Id, Name = bar.Name, ImagePath = bar.ImagePath, Address = bar.Address.Name, City = bar.Address.City.Name, AverageRating = bar.BarReviews .Where(r => r.Rating != null) .Select(r => r.Rating) .Average() }) .Skip((currentPage - 1) * itemsPerPage) .Take(itemsPerPage) .ToListAsync(); return(resultDTO); }
public async Task <int> SerchResultCountAsync(BarSearchDTO dto) { var resultCount = await context.Bars .Include(b => b.Address) .ThenInclude(a => a.City) .Include(b => b.BarReviews) .Include(b => b.BarReviews) .FilterByName(dto.NameKey) .FilterByCity(dto.CityId) .FilterByRating(dto.MinRating) .CountAsync(); return(resultCount); }
public async Task ReturnCount_WhenSearchByMultipleParameters() { var barFactoryMock = new Mock <IBarFactory>(); var barCocktailFactoryMock = new Mock <IBarCocktailFactory>(); var imagaUrlTest = "https://www.google.com/"; var bar1TestName = "abC"; var bar2TestName = "Def"; var bar3TestName = "Bci"; var bar4TestName = "jkl"; var city1Name = "Sofia"; var city2Name = "Varna"; var options = TestUtilities.GetOptions(nameof(ReturnCount_WhenSearchByMultipleParameters)); using (var arrangeContext = new CocktailMagicianDb(options)) { arrangeContext.Cities.AddRange(new List <City> { new City { Name = city1Name }, new City { Name = city2Name } }); await arrangeContext.SaveChangesAsync(); var city1Id = await arrangeContext.Cities.Where(c => c.Name == city1Name).Select(c => c.Id).FirstAsync(); var city2Id = await arrangeContext.Cities.Where(c => c.Name == city2Name).Select(c => c.Id).FirstAsync(); var address1Test = new Address { Name = "Address1Test", CityId = city1Id, Latitude = 1.1, Longitude = 1.1 }; var address2Test = new Address { Name = "Address2Test", CityId = city2Id, Latitude = 1.1, Longitude = 1.1 }; var bar1 = new Bar { Name = bar1TestName, ImagePath = imagaUrlTest, Address = address1Test, BarReviews = new List <BarReview> { new BarReview { Rating = 3 } } }; var bar2 = new Bar { Name = bar2TestName, ImagePath = imagaUrlTest, Address = address2Test, BarReviews = new List <BarReview> { new BarReview { Rating = 4 } } }; var bar3 = new Bar { Name = bar3TestName, ImagePath = imagaUrlTest, Address = address1Test, BarReviews = new List <BarReview> { new BarReview { Rating = 4 } } }; var bar4 = new Bar { Name = bar4TestName, ImagePath = imagaUrlTest, Address = address1Test, BarReviews = new List <BarReview> { new BarReview { Rating = 5 } } }; arrangeContext.Bars.AddRange(new List <Bar> { bar1, bar2, bar3, bar4 }); await arrangeContext.SaveChangesAsync(); } using (var assertContext = new CocktailMagicianDb(options)) { var substringToSearch = "Bc"; var cityIdToSearch = await assertContext.Cities.Where(c => c.Name == city1Name).Select(c => c.Id).FirstAsync(); var minRatingToSearch = 4; var dtoTest = new BarSearchDTO { CityId = cityIdToSearch, MinRating = minRatingToSearch, NameKey = substringToSearch }; var sut = new BarServices(assertContext, barFactoryMock.Object, barCocktailFactoryMock.Object); var resultCount = await sut.SerchResultCountAsync(dtoTest); Assert.AreEqual(1, resultCount); } }
public async Task SearchByName() { var barFactoryMock = new Mock <IBarFactory>(); var barCocktailFactoryMock = new Mock <IBarCocktailFactory>(); var imagaUrlTest = "https://www.google.com/"; var bar1TestName = "abC"; var bar2TestName = "Def"; var bar3TestName = "Bci"; var bar4TestName = "jkl"; var addressTest = new Address { Name = "AddressTest", //City = new City { Name = "SofiaTest" }, Latitude = 1.1, Longitude = 1.1 }; var options = TestUtilities.GetOptions(nameof(SearchByName)); using (var arrangeContext = new CocktailMagicianDb(options)) { arrangeContext.Cities.AddRange(new List <City> { new City { Name = "Sofia" }, new City { Name = "Varna" } }); await arrangeContext.SaveChangesAsync(); var city1Id = await arrangeContext.Cities.Where(c => c.Name == "Sofia").Select(c => c.Id).FirstAsync(); var city2Id = await arrangeContext.Cities.Where(c => c.Name == "Varna").Select(c => c.Id).FirstAsync(); var bar1 = new Bar { Name = bar1TestName, ImagePath = imagaUrlTest, Address = addressTest, BarReviews = new List <BarReview> { new BarReview { Rating = 3 } } }; bar1.Address.CityId = city1Id; var bar2 = new Bar { Name = bar2TestName, ImagePath = imagaUrlTest, Address = addressTest, BarReviews = new List <BarReview> { new BarReview { Rating = 4 } } }; bar2.Address.CityId = city1Id; var bar3 = new Bar { Name = bar3TestName, ImagePath = imagaUrlTest, Address = addressTest, BarReviews = new List <BarReview> { new BarReview { Rating = 4 } } }; bar3.Address.CityId = city2Id; var bar4 = new Bar { Name = bar4TestName, ImagePath = imagaUrlTest, Address = addressTest, BarReviews = new List <BarReview> { new BarReview { Rating = 5 } } }; bar3.Address.CityId = city2Id; arrangeContext.Bars.AddRange(new List <Bar> { bar1, bar2, bar3, bar4 }); await arrangeContext.SaveChangesAsync(); } using (var assertContext = new CocktailMagicianDb(options)) { var substringToSearch = "Bc"; var dtoTest = new BarSearchDTO { CityId = null, MinRating = null, NameKey = substringToSearch }; var sut = new BarServices(assertContext, barFactoryMock.Object, barCocktailFactoryMock.Object); var result = await sut.SearchAsync(dtoTest, 5, 1); Assert.AreEqual(2, result.Count()); Assert.IsFalse(result.Any(c => !c.Name.Contains(substringToSearch, StringComparison.OrdinalIgnoreCase))); } }