public CarParkingResponse GetCarParkingDetails(CarParkingRequest request) { return(new CarParkingResponse { Description = "Night Rate", TotalPrice = 6.5m }); }
public CarParkingResponse GetCarParkingDetails(CarParkingRequest request) { return(new CarParkingResponse { Description = "Early Bird", TotalPrice = 13 }); }
public CarParkingResponse GetCarParkingDetails(CarParkingRequest request) { return(new CarParkingResponse { Description = "Weekend Rate", TotalPrice = 10 }); }
public bool CheckApplicableRate(CarParkingRequest request) { return(request.Entry.DayOfWeek != DayOfWeek.Saturday && request.Entry.DayOfWeek != DayOfWeek.Sunday && request.Entry.IsBetween(18, 24) && request.Exit.IsBetween(18, 6) && ( request.Exit.Day == request.Entry.Day || request.Exit.Day == request.Entry.Day + 1 )); }
public void TestCheckApplicableRate(string description, string entry, string exit, bool expectedIsApplicable) { var request = new CarParkingRequest { Entry = DateTime.Parse(entry), Exit = DateTime.Parse(exit) }; var isApplicable = _rate.CheckApplicableRate(request); isApplicable.Should().Be(expectedIsApplicable); }
public void TestCheckApplicableRate(string description, string entry, string exit, decimal expectedTotalCost) { var request = new CarParkingRequest { Entry = DateTime.Parse(entry), Exit = DateTime.Parse(exit) }; var pricingResponse = _rate.GetCarParkingDetails(request); pricingResponse.TotalPrice.Should().Be(expectedTotalCost); }
public CarParkingResponse GetCarParkingDetails(CarParkingRequest request) { var hourlyCost = CalculateRate(request, x => x.TotalHours, HourlyRate); var dailyCost = CalculateRate(request, x => x.TotalDays, DailyRate); return(new CarParkingResponse { Description = "Standard Rate", TotalPrice = Math.Min(hourlyCost, dailyCost) }); }
public CarParkingResponse GetCarParkingDetails(CarParkingRequest request) { if (request.Exit < request.Entry) { throw new Exception("Entry must be earlier than Exit"); } return(_rates .Where(x => x.CheckApplicableRate(request)) .Select(x => x.GetCarParkingDetails(request)) .OrderBy(x => x.TotalPrice) .First()); }
public IActionResult GetCarParkingDetails(DateTime startDate, DateTime endDate) { try { CarParkingRequest request = new CarParkingRequest { Entry = startDate, Exit = endDate }; var carParkingResponse = _service.GetCarParkingDetails(request); return(Ok(carParkingResponse)); } catch (Exception ex) { return(StatusCode(500)); } }
public bool CheckApplicableRate(CarParkingRequest request) { return(request.Entry.Day == request.Exit.Day && request.Entry.IsBetween(6, 9) && request.Exit.IsBetween(15.5, 23.5)); }
public bool CheckApplicableRate(CarParkingRequest request) { return(request.Entry.IsWeekend() && request.Exit.IsWeekend() && request.Exit - request.Entry < TimeSpan.FromDays(2)); }
private decimal CalculateRate(CarParkingRequest request, Func <TimeSpan, double> selectFunc, decimal rate) { var duration = Math.Truncate(selectFunc(request.Exit - request.Entry)); return((Convert.ToDecimal(duration) + 1) * rate); }
public bool CheckApplicableRate(CarParkingRequest request) { return(true); }