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)); }
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); }
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); }
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); }
/// <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); }