Exemple #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);
        }
Exemple #2
0
        public void TestBasketSubtractFromTotalLessThanZero()
        {
            BasketItemModel basketItemApple = new BasketItemModel(_apple);
            BasketModel     basket          = new BasketModel();

            basket.AddOrUpdateBasket(basketItemApple);
            basket.AddOrUpdateBasket(basketItemApple);
            Assert.AreEqual(2, basket.Total);
            basket.SubtractFromTotal(3);
            Assert.AreEqual(0, basket.Total);
        }
Exemple #3
0
        public void TestAddNewItemAndUpdateBasket()
        {
            BasketItemModel basketItem = new BasketItemModel(_apple);
            BasketModel     basket     = new BasketModel();

            basket.AddOrUpdateBasket(basketItem);
            Assert.AreEqual(1, basket.Basket.Count);
            Assert.AreEqual(1, basket.Total);
            basket.AddOrUpdateBasket(basketItem);
            Assert.AreEqual(1, basket.Basket.Count);
            Assert.AreEqual(2, basket.Total);
        }
Exemple #4
0
        public void TestAddThreeUniqueItemsToBasket()
        {
            BasketItemModel basketItemApple  = new BasketItemModel(_apple);
            BasketItemModel basketItemBanana = new BasketItemModel(_banana);
            BasketItemModel basketItemOrange = new BasketItemModel(_orange);
            BasketModel     basket           = new BasketModel();

            basket.AddOrUpdateBasket(basketItemApple);
            basket.AddOrUpdateBasket(basketItemBanana);
            basket.AddOrUpdateBasket(basketItemOrange);
            Assert.AreEqual(3, basket.Basket.Count);
            Assert.AreEqual(6, basket.Total);
        }
Exemple #5
0
        public void TestBasketItemMeetsPromotionThreshold()
        {
            List <PromotionModel> promotions = new List <PromotionModel> {
                _orangeBuyOneGetOneHalfOff
            };
            BasketItemModel orangeBasketItem = new BasketItemModel(_orange);
            BasketModel     basket           = new BasketModel();

            basket.AddOrUpdateBasket(orangeBasketItem);
            basket.AddOrUpdateBasket(orangeBasketItem);
            IPromotionService promotionService = new PromotionService();

            promotionService.ApplyPromotionsToBasket(basket, promotions);
            Assert.AreEqual(1, basket.Basket.Count);
            Assert.AreEqual(3, basket.Total);
            Assert.IsTrue(basket.Basket[0].Discount != null);
            Assert.AreEqual("Orange", basket.Basket[0].ItemName);
            Assert.AreEqual(2, basket.Basket[0].ItemQuantity);
        }
Exemple #6
0
        public void TestApplyingSamePromotionTwiceToBasketWithSameTwoItems()
        {
            List <PromotionModel> promotions = new List <PromotionModel> {
                _appleDiscount
            };
            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(1M, basket.Basket[0].Discount.TotalDiscountAmount);
            Assert.AreEqual(2, basket.Basket[0].ItemQuantity);
        }
Exemple #7
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);
        }
Exemple #8
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);
        }
        /// <summary>
        /// Takes the user input basket and adds the item to the GroceryKiosk BasketModel.
        /// </summary>
        /// <param name="userBasket"></param>
        /// <param name="kioskItems"></param>
        /// <returns></returns>
        public static BasketModel GetItemAndAddOrUpdateBasket(string[] userBasket, List <ItemModel> kioskItems)
        {
            BasketModel basket = new BasketModel();

            foreach (var itemName in userBasket)
            {
                ItemModel item =
                    kioskItems.FirstOrDefault(
                        x => string.Equals(x.ItemName, itemName, StringComparison.CurrentCultureIgnoreCase));
                if (item == null)
                {
                    continue;
                }

                BasketItemModel basketItem = new BasketItemModel(item);
                basket.AddOrUpdateBasket(basketItem);
            }

            return(basket);
        }