public void GivenDiscountType_WhenResolveDiscountRule_ThenReturnsCorrectRuleInstance_3() { var factory = new DiscountRuleFactory(); var discountRule = factory.ResolveDiscountRule(DiscountRuleType.Percentage); Assert.AreEqual(typeof(PercentageRule), discountRule.GetType()); }
private static Basket GetBasketInstance() { var discountFactory = new DiscountRuleFactory(); var calculator = new BasketPriceCalculator(discountFactory); return(new Basket(calculator)); }
public void GivenDiscountType_WhenResolveDiscountRule_ThenReturnsCorrectRuleInstance_2() { var factory = new DiscountRuleFactory(); var discountRule = factory.ResolveDiscountRule(DiscountRuleType.BuyManyGetOneFree); Assert.AreEqual(typeof(BuyManyGetOneFree), discountRule.GetType()); }
public void GivenWrongDiscountType_WhenResolveDiscountRule_ThenThrowsException() { Assert.Throws <ArgumentException>(() => { var factory = new DiscountRuleFactory(); factory.ResolveDiscountRule((DiscountRuleType)4); }); }
public void GivenBasketItem_Percentage_WhenApplyDiscount_ThenItemIsUpdatedCorrectly() { var discountFactory = new DiscountRuleFactory(); var calculator = new BasketPriceCalculator(discountFactory); var item = new BasketItem { Quantity = 2, AfterDiscountPrice = 0, DiscountParameter = 10, DiscountRuleType = DiscountRuleType.Percentage, Product = new Product { Price = (decimal)20.10 } }; calculator.ApplyDiscount(item); Assert.AreEqual(36.18, item.AfterDiscountPrice); }
public void GivenBasketItem_Buy2Get1Free_WhenApplyDiscount_ThenItemIsUpdatedCorrectly() { var discountFactory = new DiscountRuleFactory(); var calculator = new BasketPriceCalculator(discountFactory); var item = new BasketItem { Quantity = 3, AfterDiscountPrice = (decimal)10.50, DiscountRuleType = DiscountRuleType.BuyManyGetOneFree, DiscountParameter = 3, Product = new Product { Price = (decimal)10.50 } }; calculator.ApplyDiscount(item); Assert.AreEqual(21, item.AfterDiscountPrice); }
public void GivenBasketItems_WhenCalculateTotal_ThenReturnsCorrectTotal() { var discountFactory = new DiscountRuleFactory(); var calculator = new BasketPriceCalculator(discountFactory); var item = new BasketItem { Quantity = 2, AfterDiscountPrice = (decimal)10.50, DiscountRuleType = DiscountRuleType.BuyManyGetOneFree, DiscountParameter = 2, Product = new Product { Price = (decimal)10.50 } }; var items = Enumerable.Repeat(item, 3); var total = calculator.CalculateTotal(items); Assert.AreEqual(31.50, total); }