public void CalculateYearRuleDiscount_ReturnsDiscountGrandTotal(CarsPurchaseResponse input, CarsPurchaseResponse expected) { var output = _yearRule.CalculateDiscount(input); Assert.Equal(expected.GrandTotal, output.GrandTotal); Assert.Equal(expected.TotalDiscount, output.TotalDiscount); }
public CarsPurchaseResponse CalculateDiscount(CarsPurchaseResponse carDiscount) { var grandTotal = carDiscount.GrandTotal; var percentage = grandTotal >= _minCost ? _discountPercentage : 0.00; carDiscount.TotalDiscount += grandTotal.CalculateDiscount(percentage); carDiscount.GrandTotal -= grandTotal.CalculateDiscount(percentage); return(carDiscount); }
public CarsPurchaseResponse CalculateDiscount(CarsPurchaseResponse carDiscount) { var grandTotal = carDiscount.GrandTotal; var noOfCars = carDiscount.CarPurchaseCollection.Count(); var percentage = noOfCars >= _carCount ? _discountPercentage : 0; carDiscount.TotalDiscount += grandTotal.CalculateDiscount(percentage); carDiscount.GrandTotal -= grandTotal.CalculateDiscount(percentage); return(carDiscount); }
public void CalculateCumulativeDiscount_ReturnsDiscountGrandTotal(CarsPurchaseResponse input, CarsPurchaseResponse expected) { //Arrange Data var _mockMapper = new Mock <IMapper>(); var _carDiscountRules = new Mock <IEnumerable <ICarDiscountRule> >(); var discountRules = new List <ICarDiscountRule>() { new YearRule(2000, 10, true), new CountRule(2, 3, true), new CostRule(100000, 5, true) }; _carDiscountRules.Setup(m => m.GetEnumerator()).Returns(() => discountRules.GetEnumerator()); _mockMapper.Setup(x => x.Map <CarsPurchaseResponse>(It.IsAny <IEnumerable <SelectCar> >())) .Returns((IEnumerable <SelectCar> source) => { var purchaseResponse = new CarsPurchaseResponse() { CarPurchaseCollection = source.Select( e => new CarPurchaseResponse() { Id = e.Id, LineDiscount = 0, Price = e.Price, Year = e.Year }), GrandTotal = 0, TotalDiscount = 0 }; return(purchaseResponse); }); var _carDiscountRuleProcessorService = new CarDiscountRuleProcessorService(_carDiscountRules.Object, _mockMapper.Object); //Act var output = _carDiscountRuleProcessorService.CalculateDiscount(input.CarPurchaseCollection.Select(e => new SelectCar() { Id = e.Id, Price = e.Price, Year = e.Year })); Assert.Equal(expected.GrandTotal, output.GrandTotal); Assert.Equal(expected.TotalDiscount, output.TotalDiscount); }
public CarsPurchaseResponse CalculateDiscount(CarsPurchaseResponse carDiscount) { carDiscount.GrandTotal = carDiscount.CarPurchaseCollection.Sum(e => e.Price) - carDiscount.CarPurchaseCollection.Sum(e => e.LineDiscount); carDiscount.TotalDiscount = carDiscount.CarPurchaseCollection.Sum(e => e.LineDiscount); foreach (var carLine in carDiscount.CarPurchaseCollection) { var percentage = carLine.Year <= _year ? _discountPercentage : 0; carLine.LineDiscount = carLine.Price.CalculateDiscount(percentage); carLine.Price.CalculateDiscount(percentage); carDiscount.GrandTotal -= carLine.LineDiscount; carDiscount.TotalDiscount += (carLine.LineDiscount); } return(carDiscount); }