Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }