public void HandleDiscountForNotFindingCombination()
        {
            CombinationBasedDiscount combinationBasedDiscount = new CombinationBasedDiscount();

            Cart cart = new Cart();

            cart.Items = new List <CartItem>();
            cart.Items.Add(new CartItem()
            {
                Quantity    = 10,
                ProductInfo = new ProductInfo("C", 20)
            });


            combinationBasedDiscount.HandleDiscount(cart);
            Assert.AreEqual(200, cart.TotalPrice);
        }
        public void HandleDiscountForMultipleCorrectCombination()
        {
            CombinationBasedDiscount combinationBasedDiscount = new CombinationBasedDiscount();

            Cart cart = new Cart();

            cart.Items = new List <CartItem>();
            cart.Items.Add(new CartItem()
            {
                Quantity    = 4,
                ProductInfo = new ProductInfo("C", 20)
            });

            cart.Items.Add(new CartItem()
            {
                Quantity    = 5,
                ProductInfo = new ProductInfo("D", 15)
            });


            combinationBasedDiscount.HandleDiscount(cart);
            Assert.AreEqual(135, cart.TotalPrice);
        }
        public void HandleDiscountForMultipleCorrectCombinationWithNegativeQuantity()
        {
            CombinationBasedDiscount combinationBasedDiscount = new CombinationBasedDiscount();

            Cart cart = new Cart();

            cart.Items = new List <CartItem>();
            cart.Items.Add(new CartItem()
            {
                Quantity    = -4,
                ProductInfo = new ProductInfo("C", 20)
            });

            cart.Items.Add(new CartItem()
            {
                Quantity    = -5,
                ProductInfo = new ProductInfo("D", 15)
            });


            combinationBasedDiscount.HandleDiscount(cart);
            // handle negative price befoe applying promotion
            Assert.AreEqual(-155, cart.TotalPrice);
        }
        public void CombinationBasedDiscount_SetNextRule_ShouldNotFailForNull()
        {
            CombinationBasedDiscount combinationBasedDiscount = new CombinationBasedDiscount();

            combinationBasedDiscount.SetNextRule(null);
        }
        public void CombinationBasedDiscount_ShouldNotFailForEmptyCart()
        {
            CombinationBasedDiscount combinationBasedDiscount = new CombinationBasedDiscount();

            combinationBasedDiscount.HandleDiscount(new Cart());
        }
        public void CombinationBasedDiscount_ShouldNotFailForNull()
        {
            CombinationBasedDiscount combinationBasedDiscount = new CombinationBasedDiscount();

            combinationBasedDiscount.HandleDiscount(null);
        }