public IActionResult Search(CarSelectInputModel inputModel)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(inputModel));
            }

            try
            {
                var viewModel = this.carAddsService.GetAddsAccordingToCriteria(inputModel);

                return(this.View(Constants.ViewAddsView, viewModel));
            }
            catch (ArgumentException)
            {
                var errorModel = this.carAddsService.GetErrorViewModel(Constants.CarAddInputErrorMessage);

                return(this.View(Constants.ErrorView, errorModel));
            }
        }
        public void GetAddsAccordingToCriteriaWorksCorrectly()
        {
            var options = new DbContextOptionsBuilder <DealershipDbContext>()
                          .UseInMemoryDatabase(databaseName: "Get_Adds_By_Criteria")
                          .Options;

            var db = new DealershipDbContext(options);

            var service = new CarAddsService(db);

            var inputModel = this.GetCarAddInputModel();

            var engineType   = service.GetCarEngineType(inputModel.CarEngineType);
            var transmission = service.GetCarTransmissionType(inputModel.CarTransmission);
            var category     = service.GetCarCategory(inputModel.CarCategory);
            var extras       = service.CreateCarExtras(inputModel.CarExtras);

            var car = service.CreateCar(inputModel, engineType, transmission, category, extras);

            var carAdd = service.CreateCarAdd(inputModel, car.Id, "1");

            var carSelectModel = new CarSelectInputModel
            {
                Category      = "Saloon",
                EndPrice      = decimal.MaxValue,
                EndYear       = 2019,
                EngineType    = "Gasoline / LPG",
                HorsePower    = 130,
                Location      = "Nqkude",
                Make          = "Opel",
                Model         = "Vectra",
                StartingPrice = 4000m,
                StartingYear  = 2000,
                Transmission  = "Manual"
            };

            var getCars = service.GetAddsAccordingToCriteria(carSelectModel);

            Assert.True(getCars.Count() == 1);
        }
Exemple #3
0
        public List <ViewCarAddsViewModel> GetAddsAccordingToCriteria(CarSelectInputModel inputModel)
        {
            if (inputModel.StartingPrice < PriceMinValue)
            {
                inputModel.StartingPrice = PriceMinValue;
            }

            if (inputModel.StartingYear < Constants.YearMinValue)
            {
                inputModel.StartingYear = Constants.YearMinValue;
            }

            if (inputModel.EndYear == 0)
            {
                inputModel.EndYear = DateTime.Now.Year;
            }

            if (inputModel.EndPrice == PriceMinValue)
            {
                inputModel.EndPrice = PriceMaxValue;
            }

            if (string.IsNullOrEmpty(inputModel.Location))
            {
                return(this.db.CarAdds
                       .Where(ca => ca.Car.Make == inputModel.Make &&
                              ca.Car.Model == inputModel.Model &&
                              ca.Car.Price >= inputModel.StartingPrice &&
                              ca.Car.Price <= inputModel.EndPrice &&
                              ca.Car.YearOfProduction >= inputModel.StartingYear &&
                              ca.Car.YearOfProduction <= inputModel.EndYear &&
                              ca.Car.HorsePower == inputModel.HorsePower &&
                              ca.Car.Transmission == this.GetCarTransmissionType(inputModel.Transmission) &&
                              ca.Car.EngineType == this.GetCarEngineType(inputModel.EngineType) &&
                              ca.Car.Category == this.GetCarCategory(inputModel.Category) &&
                              ca.Car.IsSold == false)
                       .Select(ca => new ViewCarAddsViewModel
                {
                    Id = ca.Id,
                    Title = ca.Title,
                    PictureUrl = this.db.CarPictures.FirstOrDefault(p => p.CarAddId == ca.Id).Url,
                    AdditionalInfo = ca.AdditionalInfo
                })
                       .ToList());
            }
            else
            {
                return(this.db.CarAdds
                       .Where(ca => ca.Car.Make == inputModel.Make &&
                              ca.Car.Model == inputModel.Model &&
                              ca.Car.Price >= inputModel.StartingPrice &&
                              ca.Car.Price <= inputModel.EndPrice &&
                              ca.Car.YearOfProduction >= inputModel.StartingYear &&
                              ca.Car.YearOfProduction <= inputModel.EndYear &&
                              ca.Car.HorsePower == inputModel.HorsePower &&
                              ca.Car.Transmission == this.GetCarTransmissionType(inputModel.Transmission) &&
                              ca.Car.EngineType == this.GetCarEngineType(inputModel.EngineType) &&
                              ca.Car.Category == this.GetCarCategory(inputModel.Category) &&
                              ca.Car.Location == inputModel.Location &&
                              ca.Car.IsSold == false)
                       .Select(ca => new ViewCarAddsViewModel
                {
                    Id = ca.Id,
                    Title = ca.Title,
                    PictureUrl = this.db.CarPictures.FirstOrDefault(p => p.CarAddId == ca.Id).Url,
                    AdditionalInfo = ca.AdditionalInfo
                })
                       .ToList());
            }
        }