示例#1
0
        public void PriceReductionForAge_ReducesValuation_BasedOnAge()
        {
            var baseValuation = 45000;

            // arrange
            var resultAge0ExpectedResult  = 36000;
            var resultAge1ExpectedResult  = 34200;
            var resultAge2ExpectedResult  = 32490;
            var resultAge4ExpectedResult  = (decimal)29322.23;
            var resultAge10ExpectedResult = (decimal)21554.53;
            var resultAge15ExpectedResult = (decimal)16678.48;

            ValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var resultAge0  = decimal.Round(valuationService.PriceReductionForAge(0, baseValuation), 2, MidpointRounding.AwayFromZero);
            var resultAge1  = decimal.Round(valuationService.PriceReductionForAge(1, baseValuation), 2, MidpointRounding.AwayFromZero);
            var resultAge2  = decimal.Round(valuationService.PriceReductionForAge(2, baseValuation), 2, MidpointRounding.AwayFromZero);
            var resultAge4  = decimal.Round(valuationService.PriceReductionForAge(4, baseValuation), 2, MidpointRounding.AwayFromZero);
            var resultAge10 = decimal.Round(valuationService.PriceReductionForAge(10, baseValuation), 2, MidpointRounding.AwayFromZero);
            var resultAge15 = decimal.Round(valuationService.PriceReductionForAge(15, baseValuation), 2, MidpointRounding.AwayFromZero);

            // assert

            Assert.AreEqual(resultAge0ExpectedResult, resultAge0);
            Assert.AreEqual(resultAge1ExpectedResult, resultAge1);
            Assert.AreEqual(resultAge2ExpectedResult, resultAge2);
            Assert.AreEqual(resultAge4ExpectedResult, resultAge4);
            Assert.AreEqual(resultAge10ExpectedResult, resultAge10);
            Assert.AreEqual(resultAge15ExpectedResult, resultAge15);
        }
示例#2
0
        public void Generate_ReducesValuation_BasedOnMileage()
        {
            // arrange
            string  regPlate                    = "MA53JRO";
            int     mileage                     = 10000;
            decimal expectedValue               = 17952.11M;
            var     ageEvaluationCalculator     = new AgeEvaluationCalculator(GetAgeEvaluationStrategies());
            var     mileageEvaluationCalculator = new MileageEvaluationCalculator(GetMileageStrategies());

            Vehicle vehicle = new Vehicle()
            {
                AgeInYears    = 10,
                BaseValuation = 30000,
                Derivative    = "ZETEC",
                Manufacturer  = "FORD",
                Model         = "FIESTA",
                RegPlate      = "MA53JRO"
            };

            Mock <IVehicleFinder> vehicleFinder = new Mock <IVehicleFinder>();

            vehicleFinder.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(vehicleFinder.Object,
                                                                    ageEvaluationCalculator,
                                                                    mileageEvaluationCalculator);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            // assert
            Assert.AreEqual(expectedValue, result.PriceOffered);
        }
示例#3
0
        public void When_Generate_Called_And_Evaluation_ForVehicle_Becomes_Negative_Then_It_Should_Return_MinimumEvaluationValue()
        {
            // arrange
            string  regPlate = "MA53JRO";
            int     mileage  = 10000;
            var     ageEvaluationCalculator     = new AgeEvaluationCalculator(GetAgeEvaluationStrategies());
            var     mileageEvaluationCalculator = new MileageEvaluationCalculator(GetMileageStrategies());
            Vehicle vehicle = new Vehicle()
            {
                AgeInYears    = 30,
                BaseValuation = 10,
                Derivative    = "ZETEC",
                Manufacturer  = "FORD",
                Model         = "FIESTA",
                RegPlate      = "MA53JRO"
            };

            var expectedValue = 250.0m;

            Mock <IVehicleFinder> vehicleFinder = new Mock <IVehicleFinder>();

            vehicleFinder.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(vehicleFinder.Object,
                                                                    ageEvaluationCalculator,
                                                                    mileageEvaluationCalculator);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            // assert
            Assert.AreEqual(expectedValue, result.PriceOffered);
        }
示例#4
0
        public void When_Generate_Called_With_NullBaseValue_ForVehicle_Should_Return_UnableToEvaluate()
        {
            // arrange
            string  regPlate = "MA53JRO";
            int     mileage  = 10000;
            var     ageEvaluationCalculator     = new AgeEvaluationCalculator(GetAgeEvaluationStrategies());
            var     mileageEvaluationCalculator = new MileageEvaluationCalculator(GetMileageStrategies());
            Vehicle vehicle = new Vehicle()
            {
                AgeInYears    = 10,
                BaseValuation = null,
            };

            var expectedValue = ErrorTypes.UnableToEvaluate;

            Mock <IVehicleFinder> vehicleFinder = new Mock <IVehicleFinder>();

            vehicleFinder.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(vehicleFinder.Object,
                                                                    ageEvaluationCalculator,
                                                                    mileageEvaluationCalculator);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            // assert
            Assert.AreEqual(expectedValue, result.Errors.First());
        }
示例#5
0
        public void Generate_VehicleIsNull_ReturnsCannotIdentifyErrorMessage()
        {
            // arrange
            string regPlate = "LP64NNV";
            int    mileage  = 18000;

            _vehicleFinderMock.Setup(x => x.FindByRegPlate(regPlate));

            IValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            var expectedErrorMessage = "we can't identify the car";

            Assert.IsTrue(result.Errors.Contains(expectedErrorMessage));
        }
示例#6
0
        public void Generate_VehicleIsLessThanMinimum_Returns250()
        {
            // arrange
            string regPlate = "MA53JRO";
            int    mileAge  = 200000;

            var vehicle = GetVehicle(15000, 3);

            _vehicleFinderMock.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var result = valuationService.Generate(regPlate, mileAge);

            // assert
            Assert.AreEqual(250, result.PriceOffered);
        }
示例#7
0
        public void Generate_VehicleValuation_ReturnsNewPrice()
        {
            // arrange
            string regPlate      = "MA53JRO";
            int    mileage       = 100000;
            var    expectedPrice = (decimal)17243.62;

            var vehicle = GetVehicle(40000, 10);

            _vehicleFinderMock.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            // assert
            Assert.AreEqual(expectedPrice, result.PriceOffered);
        }
示例#8
0
        public void Generate_VehicleBaseValueIsNull_ReturnsCannotValueErrorMessage()
        {
            // arrange
            string regPlate = "MA53JRO";
            int    mileage  = 10000;

            Vehicle vehicle = GetVehicle(null, 10);

            _vehicleFinderMock.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            var expectedErrorMessage = "we can't value a car!";

            // assert
            Assert.IsTrue(result.Errors.Contains(expectedErrorMessage));
        }
示例#9
0
        public void PriceReductionForMileage_ReducesValuation_BasedOnMileageAges()
        {
            // arrange
            int mileage = 50000;

            var vehicleLessThan3YearsOldExpectedResult     = 33750;
            var vehicleLessThan9YearsOldExpectedResult     = 38250;
            var vehicleGreaterThan10YearsOldExpectedResult = 42750;

            ValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var resultLessThan3YearsOld     = valuationService.PriceReductionForMileage(mileage, 3, 45000);
            var resultLessThan9YearsOld     = valuationService.PriceReductionForMileage(mileage, 9, 45000);
            var resultGreaterThan10YearsOld = valuationService.PriceReductionForMileage(mileage, 12, 45000);

            // assert
            Assert.AreEqual(vehicleLessThan3YearsOldExpectedResult, resultLessThan3YearsOld);
            Assert.AreEqual(vehicleLessThan9YearsOldExpectedResult, resultLessThan9YearsOld);
            Assert.AreEqual(vehicleGreaterThan10YearsOldExpectedResult, resultGreaterThan10YearsOld);
        }
示例#10
0
        public void Generate_ReturnsPopulatedValuation()
        {
            // arrange
            string regPlate = "MA53JRO";
            int    mileage  = 100000;

            var vehicle = GetVehicle(40000, 10);

            _vehicleFinderMock.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(_vehicleFinderMock.Object, _minimumValuation);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            // assert
            Assert.IsInstanceOfType(result, typeof(Valuation));

            Assert.AreEqual(mileage, result.Mileage);
            Assert.AreEqual(regPlate, result.RegPlate);
            Assert.IsNotNull(result.AgeInYears);
            Assert.IsNotNull(result.PriceOffered);
        }
示例#11
0
        public void Generate_ReturnsPopulatedValuation()
        {
            // arrange
            string regPlate = "MA53JRO";
            int    mileage  = 10000;
            var    ageEvaluationCalculator     = new AgeEvaluationCalculator(GetAgeEvaluationStrategies());
            var    mileageEvaluationCalculator = new MileageEvaluationCalculator(GetMileageStrategies());

            Vehicle vehicle = new Vehicle()
            {
                AgeInYears    = 10,
                BaseValuation = 40000,
                Derivative    = "ZETEC",
                Manufacturer  = "FORD",
                Model         = "FIESTA",
                RegPlate      = "MA53JRO"
            };

            Mock <IVehicleFinder> vehicleFinder = new Mock <IVehicleFinder>();

            vehicleFinder.Setup(x => x.FindByRegPlate(regPlate)).Returns(vehicle);

            IValuationEngine valuationService = new ValuationEngine(vehicleFinder.Object,
                                                                    ageEvaluationCalculator,
                                                                    mileageEvaluationCalculator);

            // act
            var result = valuationService.Generate(regPlate, mileage);

            // assert
            Assert.IsInstanceOfType(result, typeof(Valuation));

            Assert.AreEqual(mileage, result.Mileage);
            Assert.AreEqual(regPlate, result.RegPlate);
            Assert.IsNotNull(result.AgeInYears);
            Assert.IsNotNull(result.PriceOffered);
        }