internal AdSearchResultModel AdvancedSearchAds(AdvancedAdSearchModel searchQuery) { // This search relies on a selected category Category selectedCategory = _repository.Get <Category>(searchQuery.CategorySelectedId); // create search parameters object from AdvancedAdSearchModel AdSearchParameters searchParameters = CreateSearchParameters(searchQuery); // call repo with Type T based on switch on category with parameters (same for all objects) IList <SearchAdCache> searchResult = new List <SearchAdCache>(); switch (selectedCategory.Type) { case AdTypeEnum.CarAd: searchResult = _searchRepository.AdvancedSearchAds <CarAd>(searchParameters); break; case AdTypeEnum.OtherVehiculeAd: searchResult = _searchRepository.AdvancedSearchAds <OtherVehicleAd>(searchParameters); break; case AdTypeEnum.MotoAd: searchResult = _searchRepository.AdvancedSearchAds <MotoAd>(searchParameters); break; case AdTypeEnum.RealEstateAd: searchResult = _searchRepository.AdvancedSearchAds <RealEstateAd>(searchParameters); break; case AdTypeEnum.MotorBoatAd: searchResult = _searchRepository.AdvancedSearchAds <MotorBoatAd>(searchParameters); break; case AdTypeEnum.SailingBoatAd: searchResult = _searchRepository.AdvancedSearchAds <SailingBoatAd>(searchParameters); break; case AdTypeEnum.MotorBoatEngineAd: searchResult = _searchRepository.AdvancedSearchAds <MotorBoatEngineAd>(searchParameters); break; case AdTypeEnum.WaterSportAd: searchResult = _searchRepository.AdvancedSearchAds <WaterSportAd>(searchParameters); break; case AdTypeEnum.Ad: searchResult = _searchRepository.AdvancedSearchAds <Ad>(searchParameters); break; } // Create models for search results AdSearchResultModel model = new AdSearchResultModel(searchQuery); model.SearchResultTotalCount = searchResult.Count; model.SearchResult = searchResult.Select(a => new AdSearchResultItemModel(a)).ToList(); return(model); }
public void SearchAds_CategoryGroupIsSelected_CallAdRepoWithSubCategoriesIds() { // Given IList <SearchAdCache> searchResult = new List <SearchAdCache>(); searchResult.Add(new SearchAdCache { Title = "ship", City = new City() { Label = "the city" }, Category = new Bea.Domain.Categories.Category() }); Category group = new Category(); group.AddCategory(new Category { Id = 12 }); group.AddCategory(new Category { Id = 17 }); var adRepoMock = new Moq.Mock <ISearchRepository>(); adRepoMock.Setup(r => r.SearchAds(new string[] { "ship" }, null, new int[] { 12, 17 })).Returns(searchResult); var repoMock = new Moq.Mock <IRepository>(); repoMock.Setup(r => r.Get <Category>(12)).Returns(group); AdvancedAdSearchModel model = new AdvancedAdSearchModel() { SearchString = "ship", CategorySelectedId = 12 }; SearchServices service = new SearchServices(repoMock.Object, null, adRepoMock.Object, null, null, null); // When AdSearchResultModel result = service.LightSearchAds(model); // Then Assert.AreEqual("ship", result.SearchString); Assert.IsNull(result.CitySelectedId); Assert.AreEqual(12, result.CategorySelectedId); Assert.AreEqual(1, result.SearchResult.Count); Assert.AreEqual(1, result.SearchResultTotalCount); Assert.AreEqual("ship", result.SearchResult[0].Title); adRepoMock.VerifyAll(); }
// // GET: /Search/Search public ActionResult Search(AdvancedAdSearchModel model) { ViewBag.Categories = _categoryServices.GetAllCategoriesOfAGroup(model.CategorySelectedId) .Select(x => new SelectListItem { Text = x.Label, Value = x.Id.ToString() }); AdSearchResultModel result = _searchServices.SearchAds(model); return(View("Index", result)); }
public void AdvancedSearchAds_SearchThroughMotorBoatEngineAds_CallSearchRepoOnMotorBoatEngineAds() { // Given Category cat = new Category { Id = 1, LabelUrlPart = "cat-url-label", Label = "Label", Type = AdTypeEnum.MotorBoatEngineAd }; AdvancedAdSearchModel model = new AdvancedAdSearchModel() { CategorySelectedId = 1, SearchString = "moteur", MinHp = 12, MaxHp = 38, SelectedMotorTypeId = 2 }; IList <SearchAdCache> searchResult = new List <SearchAdCache>(); searchResult.Add(new SearchAdCache { Title = "moteur", City = new City() { Label = "the city" }, Category = cat }); var repoMock = new Moq.Mock <IRepository>(); repoMock.Setup(r => r.Get <Category>(cat.Id)).Returns(cat); var searchRepoMock = new Moq.Mock <ISearchRepository>(); searchRepoMock.Setup(r => r.AdvancedSearchAds <MotorBoatEngineAd>( It.Is <AdSearchParameters>(p => p.AndSearchStrings[0].Equals("moteur") && p.MinHp == 12 && p.MaxHp == 38 && p.MotorEngineTypeId == 2))).Returns(searchResult); SearchServices service = new SearchServices(repoMock.Object, null, searchRepoMock.Object, null, null, null); // When AdSearchResultModel result = service.AdvancedSearchAds(model); // Then Assert.AreEqual(1, result.SearchResultTotalCount); }
public void SearchAds_2SearchString_CallAdRepoWithSeveralWords() { // Given IList <SearchAdCache> searchResult = new List <SearchAdCache>(); searchResult.Add(new SearchAdCache { Title = "ship", City = new City() { Label = "the city" }, Category = new Bea.Domain.Categories.Category() }); searchResult.Add(new SearchAdCache { Title = "computer", City = new City() { Label = "the city" }, Category = new Bea.Domain.Categories.Category() }); var adRepoMock = new Moq.Mock <ISearchRepository>(); adRepoMock.Setup(r => r.SearchAds(new string[] { "ship", "computer" }, 98, null)).Returns(searchResult); AdvancedAdSearchModel model = new AdvancedAdSearchModel() { SearchString = "ship computer", CitySelectedId = 98 }; SearchServices service = new SearchServices(null, null, adRepoMock.Object, null, null, null); // When AdSearchResultModel result = service.LightSearchAds(model); // Then Assert.AreEqual("ship computer", result.SearchString); Assert.AreEqual(98, result.CitySelectedId); Assert.AreEqual(2, result.SearchResult.Count); Assert.AreEqual(2, result.SearchResultTotalCount); Assert.AreEqual("ship", result.SearchResult[0].Title); Assert.AreEqual("computer", result.SearchResult[1].Title); adRepoMock.VerifyAll(); }
// // GET: /Search/ public ActionResult Index(AdvancedAdSearchModel model) { ViewBag.Categories = _categoryServices.GetAllCategoriesOfAGroup(model.CategorySelectedId) .Select(x => new SelectListItem { Text = x.Label, Value = x.Id.ToString() }); // Equivalent to Search/Search? if (model.CategorySelectedId.HasValue) { AdSearchResultModel result = _searchServices.SearchAds(model); return(View(result)); } // Equivalent to Search/QuickSearch? (when no categories) else { AdHomeSearchResultModel result = _searchServices.QuickSearch(model); return(View("QuickSearch", result)); } }
// // GET: /Search/AddParamters public PartialViewResult AddParamters(int categoryId) { Category selectedCategory = _categoryServices.GetCategoryById(categoryId); FillViewLists(selectedCategory); AdvancedAdSearchModel model = new AdvancedAdSearchModel(); switch (selectedCategory.Type) { case AdTypeEnum.CarAd: return(PartialView("Shared/_CarAdSearch", model)); case AdTypeEnum.MotoAd: return(PartialView("Shared/_MotoAdSearch", model)); case AdTypeEnum.VehiculeAd: return(PartialView("Shared/_VehicleAdSearch", model)); case AdTypeEnum.OtherVehiculeAd: return(PartialView("Shared/_OtherVehicleAdSearch", model)); case AdTypeEnum.RealEstateAd: return(PartialView("Shared/_RealEstateAdSearch", model)); case AdTypeEnum.MotorBoatAd: return(PartialView("Shared/_MotorBoatAdSearch", model)); case AdTypeEnum.SailingBoatAd: return(PartialView("Shared/_SailingBoatAdSearch", model)); case AdTypeEnum.MotorBoatEngineAd: return(PartialView("Shared/_MotorBoatEngineAdSearch", model)); case AdTypeEnum.WaterSportAd: return(PartialView("Shared/_WaterSportAdSearch", model)); } return(null); }
public void AdvancedSearchAds_SearchThroughSailingBoatAds_CallSearchRepoOnSailingBoatAds() { // Given Category cat = new Category { Id = 1, LabelUrlPart = "cat-url-label", Label = "Label", Type = AdTypeEnum.SailingBoatAd }; AdvancedAdSearchModel model = new AdvancedAdSearchModel() { CategorySelectedId = 1, SearchString = "voilier", AgeBracketSelectedId = 2, MinLength = 0, MaxLength = 13, SelectedSailingBoatTypeId = 6, SelectedHullTypeId = 2 }; IList <SearchAdCache> searchResult = new List <SearchAdCache>(); searchResult.Add(new SearchAdCache { Title = "voilier", City = new City() { Label = "the city" }, Category = cat }); IDictionary <int, BracketItemReference> ageBr = new Dictionary <int, BracketItemReference>(); ageBr.Add(2, new BracketItemReference { LowValue = 0, HighValue = 11 }); var refMock = new Moq.Mock <IReferenceServices>(); refMock.Setup(s => s.GetAllAgeBrackets()).Returns(ageBr); var repoMock = new Moq.Mock <IRepository>(); repoMock.Setup(r => r.Get <Category>(cat.Id)).Returns(cat); var helperMock = new Moq.Mock <IHelperService>(); helperMock.Setup(r => r.GetCurrentDateTime()).Returns(new DateTime(2013, 01, 01)); var searchRepoMock = new Moq.Mock <ISearchRepository>(); searchRepoMock.Setup(r => r.AdvancedSearchAds <SailingBoatAd>( It.Is <AdSearchParameters>(p => p.AndSearchStrings[0].Equals("voilier") && p.MinLength == 0.0 && p.MaxLength == 13.0 && p.SailingBoatTypeId == 6 && p.HullTypeId == 2 && p.MinYear == 2002 && p.MaxYear == 2013))).Returns(searchResult); SearchServices service = new SearchServices(repoMock.Object, null, searchRepoMock.Object, helperMock.Object, refMock.Object, null); // When AdSearchResultModel result = service.AdvancedSearchAds(model); // Then Assert.AreEqual(1, result.SearchResultTotalCount); }
public void AdvancedSearchAds_SearchThroughRealEstateAds_CallSearchRepoOnRealEstateAds() { // Given Category cat = new Category { Id = 1, LabelUrlPart = "cat-url-label", Label = "Label", Type = AdTypeEnum.RealEstateAd }; AdvancedAdSearchModel model = new AdvancedAdSearchModel() { CategorySelectedId = 1, SearchString = "appart", NbRoomsBracketSelectedId = 2, SelectedDistrictId = 71, SelectedRealEstateTypeId = 2, MinPrice = 0, MaxPrice = 100000, SurfaceAreaBracketSelectedId = 3, IsFurnished = true }; IList <SearchAdCache> searchResult = new List <SearchAdCache>(); searchResult.Add(new SearchAdCache { Title = "appart", City = new City() { Label = "the city" }, Category = cat }); IDictionary <int, BracketItemReference> nbRoomsBr = new Dictionary <int, BracketItemReference>(); nbRoomsBr.Add(2, new BracketItemReference { LowValue = 2, HighValue = 3 }); IDictionary <int, BracketItemReference> surfBr = new Dictionary <int, BracketItemReference>(); surfBr.Add(3, new BracketItemReference { LowValue = 45, HighValue = 70 }); var refMock = new Moq.Mock <IReferenceServices>(); refMock.Setup(s => s.GetAllRealEstateNbRoomsBrackets()).Returns(nbRoomsBr); refMock.Setup(s => s.GetAllSurfaceAreaBrackets()).Returns(surfBr); var repoMock = new Moq.Mock <IRepository>(); repoMock.Setup(r => r.Get <Category>(cat.Id)).Returns(cat); var searchRepoMock = new Moq.Mock <ISearchRepository>(); searchRepoMock.Setup(r => r.AdvancedSearchAds <RealEstateAd>( It.Is <AdSearchParameters>(p => p.AndSearchStrings[0].Equals("appart") && p.MinNbRooms == 2 && p.MaxNbRooms == 3 && p.MinPrice == 0d && p.MaxPrice == 100000d && p.RealEstateTypeId == 2 && p.MinSurfaceArea == 45 && p.MaxSurfaceArea == 70 && p.IsFurnished.Value && p.DistrictId == 71))).Returns(searchResult); SearchServices service = new SearchServices(repoMock.Object, null, searchRepoMock.Object, null, refMock.Object, null); // When AdSearchResultModel result = service.AdvancedSearchAds(model); // Then Assert.AreEqual(1, result.SearchResultTotalCount); }
public void AdvancedSearchAds_SearchThroughOtherVehicleAds_CallSearchRepoOnOtherVehicleAds() { // Given Category cat = new Category { Id = 1, LabelUrlPart = "cat-url-label", Label = "Label", Type = AdTypeEnum.OtherVehiculeAd }; AdvancedAdSearchModel model = new AdvancedAdSearchModel(); model.CategorySelectedId = 1; model.SearchString = "toto"; model.CitySelectedId = 12; model.AgeBracketSelectedId = 1; model.KmBracketSelectedId = 1; model.FuelSelectedId = 89; IList <SearchAdCache> searchResult = new List <SearchAdCache>(); searchResult.Add(new SearchAdCache { Title = "car", City = new City() { Label = "the city" }, Category = cat }); var repoMock = new Moq.Mock <IRepository>(); repoMock.Setup(r => r.Get <Category>(cat.Id)).Returns(cat); var helperMock = new Moq.Mock <IHelperService>(); helperMock.Setup(r => r.GetCurrentDateTime()).Returns(new DateTime(2013, 01, 01)); IDictionary <int, BracketItemReference> ageRef = new Dictionary <int, BracketItemReference>(); ageRef.Add(1, new BracketItemReference { LowValue = 0, HighValue = 3 }); IDictionary <int, BracketItemReference> kmRef = new Dictionary <int, BracketItemReference>(); kmRef.Add(1, new BracketItemReference { LowValue = 50, HighValue = 100 }); var refMock = new Moq.Mock <IReferenceServices>(); refMock.Setup(s => s.GetAllAgeBrackets()).Returns(ageRef); refMock.Setup(s => s.GetAllKmBrackets()).Returns(kmRef); var searchRepoMock = new Moq.Mock <ISearchRepository>(); searchRepoMock.Setup(r => r.AdvancedSearchAds <OtherVehicleAd>( It.Is <AdSearchParameters>(p => p.AndSearchStrings[0].Equals("toto") && p.CityId == 12 && p.CategoryIds[0] == 1 && p.MinKm == 50 && p.MaxKm == 100 && p.MinYear == 2010 && p.MaxYear == 2013 && p.FueldId == 89))).Returns(searchResult); SearchServices service = new SearchServices(repoMock.Object, null, searchRepoMock.Object, helperMock.Object, refMock.Object, null); // When AdSearchResultModel result = service.AdvancedSearchAds(model); // Then Assert.AreEqual(1, result.SearchResultTotalCount); }
private AdSearchParameters CreateSearchParameters(AdvancedAdSearchModel searchQuery) { AdSearchParameters parameters = new AdSearchParameters(); if (!String.IsNullOrEmpty(searchQuery.SearchString)) { parameters.AndSearchStrings = searchQuery.SearchString.Trim().Split(' '); } parameters.CategoryIds = GetCategoryIdsFromQuery(searchQuery.CategorySelectedId); parameters.CityId = searchQuery.CitySelectedId; parameters.MinPrice = searchQuery.MinPrice; parameters.MaxPrice = searchQuery.MaxPrice; // -- Vehicles specific properties -- // if (searchQuery.AgeBracketSelectedId.HasValue) { parameters.MaxYear = _referenceServices.GetAllAgeBrackets()[searchQuery.AgeBracketSelectedId.Value].LowValue; parameters.MaxYear = _helperService.GetCurrentDateTime().Year - parameters.MaxYear; parameters.MinYear = _referenceServices.GetAllAgeBrackets()[searchQuery.AgeBracketSelectedId.Value].HighValue; parameters.MinYear = _helperService.GetCurrentDateTime().Year - parameters.MinYear; } if (searchQuery.KmBracketSelectedId.HasValue) { parameters.MinKm = _referenceServices.GetAllKmBrackets()[searchQuery.KmBracketSelectedId.Value].LowValue; parameters.MaxKm = _referenceServices.GetAllKmBrackets()[searchQuery.KmBracketSelectedId.Value].HighValue; } if (searchQuery.EngineSizeBracketSelectedId.HasValue) { parameters.MinEngineSize = _referenceServices.GetAllEngineSizeBrackets()[searchQuery.EngineSizeBracketSelectedId.Value].LowValue; parameters.MaxEngineSize = _referenceServices.GetAllEngineSizeBrackets()[searchQuery.EngineSizeBracketSelectedId.Value].HighValue; } parameters.BrandId = searchQuery.BrandSelectedId; parameters.FueldId = searchQuery.FuelSelectedId; parameters.IsAuto = searchQuery.IsAutomatic; //-- Real Estate specific properties --// parameters.RealEstateTypeId = searchQuery.SelectedRealEstateTypeId; parameters.DistrictId = searchQuery.SelectedDistrictId; parameters.IsFurnished = searchQuery.IsFurnished; if (searchQuery.NbRoomsBracketSelectedId.HasValue) { parameters.MinNbRooms = _referenceServices.GetAllRealEstateNbRoomsBrackets()[searchQuery.NbRoomsBracketSelectedId.Value].LowValue; parameters.MaxNbRooms = _referenceServices.GetAllRealEstateNbRoomsBrackets()[searchQuery.NbRoomsBracketSelectedId.Value].HighValue; } if (searchQuery.SurfaceAreaBracketSelectedId.HasValue) { parameters.MinSurfaceArea = _referenceServices.GetAllSurfaceAreaBrackets()[searchQuery.SurfaceAreaBracketSelectedId.Value].LowValue; parameters.MaxSurfaceArea = _referenceServices.GetAllSurfaceAreaBrackets()[searchQuery.SurfaceAreaBracketSelectedId.Value].HighValue; } //-- Water sport specific properties --// parameters.MotorBoatTypeId = searchQuery.SelectedMotorBoatTypeId; parameters.MotorEngineTypeId = searchQuery.SelectedMotorTypeId; parameters.SailingBoatTypeId = searchQuery.SelectedSailingBoatTypeId; parameters.HullTypeId = searchQuery.SelectedHullTypeId; parameters.WaterTypeId = searchQuery.SelectedWaterTypeId; parameters.MinLength = searchQuery.MinLength; parameters.MaxLength = searchQuery.MaxLength; parameters.MinHp = searchQuery.MinHp; parameters.MaxHp = searchQuery.MaxHp; return(parameters); }
public void AdvancedAdSearchModelCopy_Ctorwithcopy() { // Given AdvancedAdSearchModel m = new AdvancedAdSearchModel { MinPrice = 1, MaxPrice = 2, AgeBracketSelectedId = 3, KmBracketSelectedId = 4, BrandSelectedId = 5, FuelSelectedId = 6, IsAutomatic = true, EngineSizeBracketSelectedId = 8, NbRoomsBracketSelectedId = 9, SelectedRealEstateTypeId = 10, SelectedDistrictId = 11, SurfaceAreaBracketSelectedId = 12, IsFurnished = true, SelectedHullTypeId = 13, SelectedWaterTypeId = 14, SelectedMotorBoatTypeId = 15, MinLength = 16, MaxLength = 17, MinHp = 18, MaxHp = 19, SelectedMotorTypeId = 20 }; // When AdvancedAdSearchModel actual = new AdvancedAdSearchModel(m); // Then Assert.AreEqual(actual.MinPrice, 1); Assert.AreEqual(actual.MaxPrice, 2); Assert.AreEqual(actual.AgeBracketSelectedId, 3); Assert.AreEqual(actual.KmBracketSelectedId, 4); Assert.AreEqual(actual.BrandSelectedId, 5); Assert.AreEqual(actual.FuelSelectedId, 6); Assert.IsTrue(actual.IsAutomatic.Value); Assert.AreEqual(actual.EngineSizeBracketSelectedId, 8); Assert.AreEqual(actual.NbRoomsBracketSelectedId, 9); Assert.AreEqual(actual.SelectedRealEstateTypeId, 10); Assert.AreEqual(actual.SelectedDistrictId, 11); Assert.AreEqual(actual.SurfaceAreaBracketSelectedId, 12); Assert.IsTrue(actual.IsFurnished.Value); Assert.AreEqual(actual.SelectedHullTypeId, 13); Assert.AreEqual(actual.SelectedWaterTypeId, 14); Assert.AreEqual(actual.SelectedMotorBoatTypeId, 15); Assert.AreEqual(actual.MinLength, 16); Assert.AreEqual(actual.MaxLength, 17); Assert.AreEqual(actual.MinHp, 18); Assert.AreEqual(actual.MaxHp, 19); Assert.AreEqual(actual.SelectedMotorTypeId, 20); }