Esempio n. 1
0
        public IActionResult Availables([FromQuery] SearchAvailableVehiclesRequestModel request)
        {
            logger.LogInformation($"GET /api/vehicle reach with query params: {request}");

            var response = vehicleService.GetAvailables(request);

            return(response.CreateResponse(this));
        }
Esempio n. 2
0
        public void ShouldValidateEndDateLowerThanStartDate()
        {
            var request = new SearchAvailableVehiclesRequestModel {
                StartDate = new DateTime(2022, 1, 5), EndDate = new DateTime(2022, 1, 3)
            };

            Response <IList <VehicleAvailableResponseModel> > response = vehicleService.GetAvailables(request);

            rentalRepositoryMock.Verify(x => x.GetVehiclesAvailables(It.IsAny <DateTime>(), It.IsAny <DateTime>()), Times.Never);

            Assert.True(response.HasErrors());
            Assert.AreEqual(response.Data, null);
            Assert.AreEqual(response.Messages.Count(x => x.Type == MessageType.Error), 1);
            Assert.AreEqual(response.Messages.Count(x => x.Code == Constants.START_DATE_GREATER_THAN_END_DATE), 1);
        }
Esempio n. 3
0
        public void ShouldReturnAnEmptyListIfThereAreNotVehicleAvailables()
        {
            var request = new SearchAvailableVehiclesRequestModel {
                StartDate = new DateTime(2022, 1, 1), EndDate = new DateTime(2022, 1, 3)
            };

            rentalRepositoryMock.Setup(x => x.GetVehiclesAvailables(It.IsAny <DateTime>(), It.IsAny <DateTime>())).Returns(new List <Vehicle>());

            Response <IList <VehicleAvailableResponseModel> > response = vehicleService.GetAvailables(request);

            rentalRepositoryMock.Verify(x => x.GetVehiclesAvailables(It.IsAny <DateTime>(), It.IsAny <DateTime>()), Times.Once);

            Assert.False(response.HasErrors());
            Assert.AreEqual(response.Data.Count, 0);
            Assert.AreEqual(response.Messages.Count(x => x.Type == MessageType.Warning), 1);
            Assert.AreEqual(response.Messages.Count(x => x.Code == Constants.NO_VEHICLE_AVAILABLES), 1);
        }
Esempio n. 4
0
        public void ShouldGetAvailables()
        {
            var request = new SearchAvailableVehiclesRequestModel {
                StartDate = new DateTime(2022, 1, 1), EndDate = new DateTime(2022, 1, 3)
            };
            var vehicleAvailables = new List <Vehicle> {
                new Vehicle {
                    Id = 1, Brand = "brand", PricePerDay = 10, Year = 2021
                }
            };

            rentalRepositoryMock.Setup(x => x.GetVehiclesAvailables(It.IsAny <DateTime>(), It.IsAny <DateTime>())).Returns(vehicleAvailables);

            Response <IList <VehicleAvailableResponseModel> > response = vehicleService.GetAvailables(request);

            Assert.False(response.HasErrors());
            Assert.AreEqual(response.Data.Count, 1);
        }
Esempio n. 5
0
        /// <summary>
        /// Get available vehicles by range date
        /// </summary>
        /// <param name="request"></param>
        public Response <IList <VehicleAvailableResponseModel> > GetAvailables(SearchAvailableVehiclesRequestModel request)
        {
            var response = new Response <IList <VehicleAvailableResponseModel> >();

            logger.LogInformation("Starting request validation");

            DateUtils.ValidateRangeDates(response, request.StartDate, request.EndDate);

            if (response.HasErrors())
            {
                return(response);
            }

            try
            {
                logger.LogInformation("Calling rental repository to find availables vehicles by range dates");

                var vehicleAvailables = repository.RentalRepository.GetVehiclesAvailables(request.StartDate.Value, request.EndDate.Value);

                logger.LogInformation($"{vehicleAvailables.Count()} vehicles founds");

                response.Data = vehicleAvailables.Select(x => new VehicleAvailableResponseModel {
                    Id = x.Id, Brand = x.Brand, PricePerDay = x.PricePerDay, Year = x.Year
                }).ToList();

                if (!response.Data.Any())
                {
                    response.AddWarning(Constants.NO_VEHICLE_AVAILABLES, "No vehicles availables for selected dates");
                }
            }
            catch (Exception e)
            {
                ExceptionUtils.HandleGeneralError(response, logger, e);
            }

            return(response);
        }