public ActionResult CalculateFare(TaxiRide fare) { try { IFareCalculator calculator = new FareCalculator(); return(Json(calculator.CalculateFare(fare))); } #region Exception Handling catch (ArgumentException ex) { HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json(ex.Message.ToString())); } catch (NullReferenceException ex) { HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json(ex.Message.ToString())); } catch (OverflowException ex) { HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json(ex.Message.ToString())); } catch (Exception) { HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json("Unknown error processing your fare")); } #endregion }
public HttpResponseMessage Calculate(TaxiRide aod_taxi_ride) { var cost = lod_rate_calc.CalcRate(aod_taxi_ride); HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new { cost = cost }); return(response); }
private bool IsPeakWeekday(TaxiRide ride) { bool result; result = ((ride.StartTimeMinutes >= 960d) && (ride.StartTimeMinutes <= 1200d) && (ride.RideDate.IsWeekday())); return(result); }
public double CalculateFare(TaxiRide ride) { try { #region Guards if (ride == null) { throw new ArgumentNullException("You must submit a ride in order for it to be calculated"); } if (ride.MinutesAboveSixMph < 0) { throw new ArgumentException("Minutes above six mph must be non-negative"); } if (ride.MilesBelowSixMph < 0) { throw new ArgumentException("Miles above six mph must be non-negative"); } #endregion double result = FareConstants.BASE_FARE + FareConstants.NY_TAX_SURCHARGE; if (IsPeakWeekday(ride)) { result += FareConstants.PEAK_SURCHARGE; } if (IsNight(ride)) { result += FareConstants.NIGHT_SURCHARGE; } result += ride.MilesBelowSixMph * 5d * FareConstants.UNIT_RATE; result += ride.MinutesAboveSixMph * FareConstants.UNIT_RATE; #region Overflow check // large inputs may result in overflow... unrealistic, but possible if (result == Double.PositiveInfinity) { throw new OverflowException(); } #endregion return(result); } #region Exception Handling catch (OverflowException) { throw new OverflowException("The numbers you input were too large to be calculated properly"); } catch (ArgumentNullException ex) { throw new ArgumentNullException(ex.Message); } catch (ArgumentException ex) { throw new ArgumentException(ex.Message); } catch (Exception) { throw new Exception("An unknown exception occurred when calculating your fare"); } #endregion }
//------------------------------- // This tests whether or not the user is subject to Night hours surcharge. // DateTime: 10/08/2010 11:59:00 pm. This is a Friday // Any time after 8:00 PM and before 6:00 AM is subject to this charge. // Expected result is true. //------------------------------- public void CheckNightHoursTest() { TaxiRide lod_taxi_ride = new TaxiRide(); DateTime lod_test = new DateTime(); lod_test = DateTime.Parse("10/08/2010 11:59:00 pm"); Assert.IsTrue(lod_taxi_ride.CheckNightHours(lod_test)); }
//------------------------------- // This tests whether or not the user is riding on a Weekend. // DateTime: 10/08/2010 05:00:00 pm. This is a Friday. // Expected result is false. //------------------------------- public void CheckPeakWeekendTest() { TaxiRide lod_taxi_ride = new TaxiRide(); DateTime lod_test = new DateTime(); lod_test = DateTime.Parse("10/08/2010 05:00:00 pm"); Assert.IsFalse(lod_taxi_ride.CheckPeakWeekend(lod_test)); }
public void CalcRateTestPeakHours() { TaxiRide lod_taxi_ride = new TaxiRide() { state = "New York", miles = 1, minutes = 5, RideTime = DateTime.Parse("10/08/2010 06:00:00 PM") }; RateCalculator lod_rate_calculator = new RateCalculator(); Assert.AreEqual((decimal)8, lod_rate_calculator.CalcRate(lod_taxi_ride)); }
public void CalcRateTestNightHours() { TaxiRide lod_taxi_ride = new TaxiRide() { state = "New York", miles = 5, minutes = 5, RideTime = DateTime.Parse("10/08/2010 12:30:00 am") }; RateCalculator lod_rate_calculator = new RateCalculator(); Assert.AreEqual((decimal)14.5, lod_rate_calculator.CalcRate(lod_taxi_ride)); }
public void CalcRateTestBaseCase() { TaxiRide lod_taxi_ride = new TaxiRide() { state = "New York", miles = 2, minutes = 5, RideTime = DateTime.Parse("10/08/2010 05:30:00 pm") }; RateCalculator lod_rate_calculator = new RateCalculator(); Assert.AreEqual((decimal)9.75, lod_rate_calculator.CalcRate(lod_taxi_ride)); }
public void CalcRateTestNoNYTax() { TaxiRide lod_taxi_ride = new TaxiRide() { state = "New Jersey", miles = 2, minutes = 5, RideTime = DateTime.Parse("10/08/2010 09:08:00 AM") }; RateCalculator lod_rate_calculator = new RateCalculator(); Assert.AreEqual((decimal)8.25, lod_rate_calculator.CalcRate(lod_taxi_ride)); }
public void CalculateFare_NullRide_ShouldThrowNullArgumentException() { // Arrange TaxiRide ride = null; FareCalculator calculator = new FareCalculator(); // Act calculator.CalculateFare(ride); // Assert // Assert handled by attribute }
public void CalculateFare_VeryLargeInput_ShouldThrowOverflowException() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = int.MaxValue, MilesBelowSixMph = double.MaxValue, StartTime = new System.DateTime(2010, 10, 08, 20, 0, 0), }; FareCalculator calculator = new FareCalculator(); // Act calculator.CalculateFare(ride); // Assert // Assert handled by attribute }
public void CalculateFare_NegativeMinutesAboveSixMph_ShouldThrowArgumentException() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = -1, MilesBelowSixMph = 0, StartTime = new System.DateTime(2010, 10, 08, 20, 0, 0), }; FareCalculator calculator = new FareCalculator(); // Act calculator.CalculateFare(ride); // Assert // Assert handled by attribute }
public void CalculateFare_BaseCase() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = 5, MilesBelowSixMph = 2, StartTime = new System.DateTime(2010, 10, 08, 17, 30, 0), }; FareCalculator calculator = new FareCalculator(); double expected = 9.75; // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(actual, expected); }
public void CalculateFare_ShouldBePeakWeekday() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = 5, MilesBelowSixMph = 2, StartTime = new System.DateTime(2010, 10, 08, 16, 0, 0), }; double expected = 9.75; FareCalculator calculator = new FareCalculator(); // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(expected, actual); }
public void CalculateFare_NoAddons_PartialMilesBelowSixMph() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = 5, MilesBelowSixMph = .4, StartTime = new System.DateTime(2010, 10, 08, 6, 00, 01), }; double expected = 5.95; FareCalculator calculator = new FareCalculator(); // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(expected, actual); }
public void CalculateFare_NoAddons_PeakTimeAndSunday() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2018, 12, 02), MinutesAboveSixMph = 5, MilesBelowSixMph = 2, StartTime = new System.DateTime(2010, 12, 02, 17, 30, 0), }; FareCalculator calculator = new FareCalculator(); double expected = 8.75; // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(actual, expected); }
public void CalculateFare_NoAddons_MinFringePeak() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = 5, MilesBelowSixMph = 2, StartTime = new System.DateTime(2010, 10, 08, 15, 59, 59), }; double expected = 8.75; FareCalculator calculator = new FareCalculator(); // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(expected, actual); }
public void CalculateFare_OvernightAddon_MaxFringePeak() { // Arrange TaxiRide ride = new TaxiRide { RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = 5, MilesBelowSixMph = 2, StartTime = new System.DateTime(2010, 10, 08, 20, 00, 01), }; double expected = 9.25; FareCalculator calculator = new FareCalculator(); // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(expected, actual); }
public void CalculateFare_ShouldBeMinOvernightAndMaxPeak() { // Arrange TaxiRide ride = new TaxiRide { // Friday RideDate = new System.DateTime(2010, 10, 08), MinutesAboveSixMph = 5, MilesBelowSixMph = 2, // 8 PM StartTime = new System.DateTime(2010, 10, 08, 20, 0, 0), }; double expected = 10.25; FareCalculator calculator = new FareCalculator(); // Act double actual = calculator.CalculateFare(ride); // Assert Assert.AreEqual(expected, actual); }
public async Task <int> StartRideAsync(Taxi taxi, Driver driver) { if (taxi == null) { throw new ArgumentNullException(nameof(taxi)); } if (driver == null) { throw new ArgumentNullException(nameof(driver)); } var newRide = new TaxiRide { Start = DateTime.Now, Taxi = taxi, Driver = driver }; Rides.Add(newRide); await SaveChangesAsync(); return(newRide.ID); }
public void Setup() { _sut = new TaxiRide(4, 2); }
private bool IsNight(TaxiRide ride) { return(((ride.StartTimeMinutes >= 1200d) || (ride.StartTimeMinutes <= 360d)) ? true : false); }
//------------------------------- // This tests whether or not the user is subject to New York State tax. // DateTime: 10/08/2010 06:00:00 pm. This is a Friday // Anyone requesting a ride in New York is subject to this tax. // Expected result is true. //------------------------------- public void CheckStateTest() { TaxiRide lod_taxi_ride = new TaxiRide(); Assert.IsTrue(lod_taxi_ride.CheckState("New York")); }