示例#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
 }
示例#2
0
        public void When_ToppingUpTheCard_Expect_TopUpValue()
        {
            //arrange
            var fareCalculator = new FareCalculator();
            var card           = new Card(fareCalculator);

            //act
            card.TopUp(10);

            //assert
            Assert.Equal(10, card.Total);
        }
示例#3
0
        public void CalculateFare_NullRide_ShouldThrowNullArgumentException()
        {
            // Arrange
            TaxiRide ride = null;

            FareCalculator calculator = new FareCalculator();

            // Act
            calculator.CalculateFare(ride);

            // Assert
            // Assert handled by attribute
        }
示例#4
0
        public void Adjust()
        {
            //arrange
            var fareCalculator = new FareCalculator();
            var card           = new Card(fareCalculator);

            card.TopUp(10);
            var fare = 3m;

            //act
            card.Adjust(fare);

            //assert
            Assert.Equal(7, card.Total);
        }
示例#5
0
        public void When_TappingOff_Expect_CardToHaveMachineId()
        {
            //arrange
            var fareCalculator = new FareCalculator();
            var card           = new Card(fareCalculator);
            var machineId      = Guid.Parse("be2f9946-3bc3-47fc-ae3c-ab3bf261bbdf");
            var tapOffTime     = new DateTime(2020, 2, 20, 2, 2, 2);
            var tapOff         = new Tap(machineId, tapOffTime);

            //act
            card.TapOff(tapOff);

            //assert
            Assert.Equal(Guid.Parse("be2f9946-3bc3-47fc-ae3c-ab3bf261bbdf"), card.TappedOff.MachineId);
        }
示例#6
0
        public void When_TappingOn_Expect_CardToHaveTapOnTime()
        {
            //arrange
            var fareCalculator = new FareCalculator();
            var card           = new Card(fareCalculator);
            var machineId      = Guid.Parse("c17479ba-7c57-4e73-a65c-461e230cde9d");
            var tapOnTime      = new DateTime(2020, 2, 20);
            var tapOn          = new Tap(machineId, tapOnTime);

            //act
            card.TapOn(tapOn);

            //assert
            Assert.Equal(tapOnTime, card.TappedOn.Time);
        }
示例#7
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
        }
        public void test()
        {
            //arrange
            var machineId = Guid.Parse("c17479ba-7c57-4e73-a65c-461e230cde9d");
            var tapOnTime = new DateTime(2020, 01, 04);
            var tapOn     = new Tap(machineId, tapOnTime);

            var machineId2 = Guid.Parse("be2f9946-3bc3-47fc-ae3c-ab3bf261bbdf");
            var tapOffTime = new DateTime(2020, 2, 20, 2, 2, 2);
            var tapOff     = new Tap(machineId2, tapOffTime);

            var fareCalculator = new FareCalculator();

            //act
            var calculatedFare = fareCalculator.CalculateFare(tapOn, tapOff);

            //assert
            Assert.Equal(3, calculatedFare);
        }
示例#9
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);
        }
示例#10
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
        }
示例#11
0
        public void TestWithMoq()
        {
            //arrange
            var mock = new Mock <ILiveRate>();  //more dependencies. //if tests are too difficult to write, consider rewriting the application

            mock.Setup(x => x.GetRate()).Returns(5.3m);
            mock.Setup(x => x.Name).Returns("google");

            var fareCalculator = new FareCalculator(new List <ILiveRate> {
                mock.Object
            });

            fareCalculator.Commission = 2m;

            //act
            var fare = fareCalculator.CalculateFare("google");

            //assert
            Assert.Equal(10.6m, fare);
        }
示例#12
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);
        }
示例#13
0
        public void TestWithCustomMock()
        {
            //arrange
            var mockGoogleLiveRate = new MockGoogleLiveRate();

            mockGoogleLiveRate.Name = "google";

            var fareCalculator = new FareCalculator(new List <ILiveRate> {
                mockGoogleLiveRate
            });

            fareCalculator.Commission = 2m;

            //act
            var fare = fareCalculator.CalculateFare(mockGoogleLiveRate.Name);


            //assert
            Assert.Equal(10.6m, fare);
        }
示例#14
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);
        }
示例#15
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);
        }
示例#16
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);
        }
示例#17
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);
        }
示例#18
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);
        }
示例#19
0
        public void When_AccessingTrips_Expect_ListOfAllTrips()
        {
            //arrange
            var fareCalculator = new FareCalculator();
            var card           = new Card(fareCalculator);

            var machineId1 = Guid.Parse("c17479ba-7c57-4e73-a65c-461e230cde9d");
            var tapOnTime1 = new DateTime(2020, 01, 04);
            var tapOn      = new Tap(machineId1, tapOnTime1);

            var machineId  = Guid.Parse("be2f9946-3bc3-47fc-ae3c-ab3bf261bbdf");
            var tapOffTime = new DateTime(2020, 2, 20, 2, 2, 2);
            var tapOff     = new Tap(machineId, tapOffTime);

            //act
            card.TapOn(tapOn);
            card.TapOff(tapOff);

            //assert
            Assert.NotNull(card.Trips);
            Assert.NotEmpty(card.Trips);
        }
示例#20
0
        public void When_TappingOff_Expect_CardToDeductFare()
        {
            //arrange
            var fareCalculator = new FareCalculator();
            var card           = new Card(fareCalculator);

            card.TopUp(10);

            var machineId1 = Guid.Parse("c17479ba-7c57-4e73-a65c-461e230cde9d");
            var tapOnTime1 = new DateTime(2020, 01, 04);
            var tapOn      = new Tap(machineId1, tapOnTime1);

            card.TapOn(tapOn);

            var machineId  = Guid.Parse("be2f9946-3bc3-47fc-ae3c-ab3bf261bbdf");
            var tapOffTime = new DateTime(2020, 2, 20, 2, 2, 2);
            var tapOff     = new Tap(machineId, tapOffTime);

            //act
            card.TapOff(tapOff);

            //assert
            Assert.Equal(7, card.Total);
        }