public void TestIfMultiplePromotionsAddedForSameItemOnlyFirstIsTaken() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount, _appleGroupDiscount }; BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(appleBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(2, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Apple", basket.Basket[0].ItemName); Assert.AreEqual(2, basket.Basket[0].ItemQuantity); Assert.AreEqual(1, basket.Basket[0].Discount.ThresholdQuantity); Assert.AreEqual(.5M, basket.Basket[0].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[0].Discount.TotalDiscountAmount); }
public void TestApplyingMultiplePromotionsToMultipleBasketItems() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount, _orangeBuyOneGetOneHalfOff, _bananaGroupDiscountOnThree }; BasketItemModel orangeBasketItem = new BasketItemModel(_orange); BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketItemModel bananaBasketItem = new BasketItemModel(_banana); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); basket.AddOrUpdateBasket(bananaBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); basket.AddOrUpdateBasket(bananaBasketItem); basket.AddOrUpdateBasket(bananaBasketItem); basket.AddOrUpdateBasket(appleBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(3, basket.Basket.Count); Assert.AreEqual(7, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Apple", basket.Basket[0].ItemName); Assert.AreEqual(2, basket.Basket[0].ItemQuantity); Assert.AreEqual(1, basket.Basket[0].Discount.ThresholdQuantity); Assert.AreEqual(.5M, basket.Basket[0].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[0].Discount.TotalDiscountAmount); Assert.IsTrue(basket.Basket[1].Discount != null); Assert.AreEqual("Orange", basket.Basket[1].ItemName); Assert.AreEqual(2, basket.Basket[1].ItemQuantity); Assert.AreEqual(2, basket.Basket[1].Discount.ThresholdQuantity); Assert.AreEqual(1, basket.Basket[1].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[1].Discount.TotalDiscountAmount); Assert.IsTrue(basket.Basket[2].Discount != null); Assert.AreEqual("Banana", basket.Basket[2].ItemName); Assert.AreEqual(3, basket.Basket[2].ItemQuantity); Assert.AreEqual(3, basket.Basket[2].Discount.ThresholdQuantity); Assert.AreEqual(1, basket.Basket[2].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[2].Discount.TotalDiscountAmount); }
public void TestApplyingOnePromotionToBasketWithOneItem() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount }; BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(1, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual(0.5M, basket.Basket[0].Discount.TotalDiscountAmount); }
public void TestBasketItemFailsToMeetPromotionThreshold() { List <PromotionModel> promotions = new List <PromotionModel> { _orangeBuyOneGetOneHalfOff }; BasketItemModel orangeBasketItem = new BasketItemModel(_orange); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(orangeBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(2, basket.Total); Assert.IsTrue(basket.Basket[0].Discount == null); Assert.AreEqual("Orange", basket.Basket[0].ItemName); }
public void TestApplyingOnePromotionToBasketWithTwoDifferentItems() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount }; BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketItemModel orangeBasketItem = new BasketItemModel(_orange); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(2, basket.Basket.Count); Assert.AreEqual(3, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Apple", basket.Basket[0].ItemName); Assert.IsTrue(basket.Basket[1].Discount == null); Assert.AreEqual("Orange", basket.Basket[1].ItemName); Assert.AreEqual(0.5M, basket.Basket[0].Discount.TotalDiscountAmount); }