Ejemplo n.º 1
0
 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
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        private bool IsPeakWeekday(TaxiRide ride)
        {
            bool result;

            result = ((ride.StartTimeMinutes >= 960d) && (ride.StartTimeMinutes <= 1200d) && (ride.RideDate.IsWeekday()));
            return(result);
        }
Ejemplo n.º 4
0
        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
        }
Ejemplo n.º 5
0
        //-------------------------------
        // 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));
        }
Ejemplo n.º 6
0
        //-------------------------------
        // 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));
        }
Ejemplo n.º 7
0
        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));
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
        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));
        }
Ejemplo n.º 11
0
        public void CalculateFare_NullRide_ShouldThrowNullArgumentException()
        {
            // Arrange
            TaxiRide ride = null;

            FareCalculator calculator = new FareCalculator();

            // Act
            calculator.CalculateFare(ride);

            // Assert
            // Assert handled by attribute
        }
Ejemplo n.º 12
0
        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
        }
Ejemplo n.º 13
0
        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
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
 public void Setup()
 {
     _sut = new TaxiRide(4, 2);
 }
Ejemplo n.º 23
0
 private bool IsNight(TaxiRide ride)
 {
     return(((ride.StartTimeMinutes >= 1200d) || (ride.StartTimeMinutes <= 360d)) ? true : false);
 }
Ejemplo n.º 24
0
        //-------------------------------
        // 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"));
        }