Пример #1
0
        public void OrderWithNoPromotion()
        {
            IList <Product> products = GetProductCatalogue();

            IList <Promotion> promotions = GetActivePromotion();

            //product ordered
            IList <Product> orderedProduct = new List <Product>();

            orderedProduct.Add(new Product()
            {
                Name = 'A', Quantity = 1
            });
            orderedProduct.Add(new Product()
            {
                Name = 'B', Quantity = 1
            });
            orderedProduct.Add(new Product()
            {
                Name = 'C', Quantity = 1
            });
            Order order = new Order(orderedProduct);

            PromotionCalculator promotionCalculator = new PromotionCalculator();
            int result = promotionCalculator.GetPromotion(products, order, promotions);

            Assert.AreEqual(result, 100);
        }
Пример #2
0
        public void ScenanarioC()
        {
            //ARRANGE
            var A = new Product()
            {
                Name = "A", Price = 50
            };
            var B = new Product()
            {
                Name = "B", Price = 30
            };
            var C = new Product()
            {
                Name = "C", Price = 20
            };
            var D = new Product()
            {
                Name = "D", Price = 15
            };

            var productBundles = new ProductBundles();

            //scenario b data set
            var cart = new Cart();

            cart.Add(A);
            cart.Add(A);
            cart.Add(A);
            cart.Add(B);
            cart.Add(B);
            cart.Add(B);
            cart.Add(B);
            cart.Add(B);
            cart.Add(C);
            cart.Add(D);

            //Yes, we go definitly use Product instead of string, but let's KISS
            var flattenedCart = new List <string>(cart.CartProducts.Select(p => p.Name).ToList());

            //Returning result from the recursing method - could perhaps have yieled
            var cartBundles = new List <string>();

            var promotionCalculator = new PromotionCalculator();

            //Find the applicabale bundles in the cart
            promotionCalculator.ApplicablePromotions(flattenedCart, productBundles.ActiveBundles, cartBundles);

            //Explicit Sum by remaing cart items
            var sum = cart.Sum(flattenedCart);

            //Plus prices for bundles
            sum += cart.Sum(cartBundles, productBundles.ActiveBundles);

            //ASSERT
            Assert.True(sum == 280);
        }
Пример #3
0
        public decimal GetBasketValue()
        {
            InitializeCartItems();

            PromotionCalculator promotionCalculator = new PromotionCalculator(_cartItems, PromotionRules.GetPromotions());

            _finalValue = promotionCalculator.ComputeResult();

            return(_finalValue);
        }
Пример #4
0
        public void GivenNoScannedItems_TotalReturnsZero()
        {
            const decimal expectedTotal       = 0;
            var           priceReader         = new MemoryPriceReader();
            var           promotionCalculator = new PromotionCalculator();
            var           checkout            = new Checkout(priceReader, promotionCalculator);

            var total = checkout.Total();

            Assert.AreEqual(expectedTotal, total);
        }
Пример #5
0
        public void ScanOneProduct_TotalReturnsPrice()
        {
            const decimal expectedTotal       = 0.5m;
            var           priceReader         = new MemoryPriceReader();
            var           promotionCalculator = new PromotionCalculator();
            var           checkout            = new Checkout(priceReader, promotionCalculator);
            var           item = new Item("A99");

            checkout.Scan(item);
            var total = checkout.Total();

            Assert.AreEqual(expectedTotal, total);
        }
Пример #6
0
        public void ScanTwoProducts_TotalReturnsPriceOfBoth()
        {
            const decimal expectedTotal       = 0.8m;
            var           priceReader         = new MemoryPriceReader();
            var           promotionCalculator = new PromotionCalculator();
            var           checkout            = new Checkout(priceReader, promotionCalculator);
            var           itemA = new Item("A99");
            var           itemB = new Item("B15");

            checkout.Scan(itemA);
            checkout.Scan(itemB);
            var total = checkout.Total();

            Assert.AreEqual(expectedTotal, total);
        }
Пример #7
0
        static void Main(string[] args)
        {
            Console.WriteLine("Set SKU unit price");
            Dictionary <char, int> orders = new Dictionary <char, int>();

            orders.Add('A', 1);
            orders.Add('B', 1);
            orders.Add('C', 1);

            Console.WriteLine("Calculate Promotion price");
            PromotionCalculator _calculator = new PromotionCalculator();

            decimal totalPrice = _calculator.CalculatePromotionPrice(orders);

            Console.WriteLine(string.Format("The total price is: {0}", totalPrice));
        }
Пример #8
0
        public void OneDiscount()
        {
            List <CartSKU> cartItems = new List <CartSKU> {
                new CartSKU {
                    SKUName = "a", SKUQuantity = 5
                },
                new CartSKU {
                    SKUName = "b", SKUQuantity = 5
                },
                new CartSKU {
                    SKUName = "c", SKUQuantity = 1
                }
            };
            PromotionCalculator PromoCalObj = new PromotionCalculator(new PromotionSKUObj());
            int Total = PromoCalObj.GetCartTotalAmount(cartItems);

            //Assert
            Assert.AreEqual(370, Total);
        }
Пример #9
0
        public void TwoB15_Returns045()
        {
            const decimal expectedTotal = 0.45m;
            var           priceReader   = new MemoryPriceReader();
            var           promotions    = new List <IPromotion>
            {
                new A99Promotion(),
                new B15Promotion()
            };
            var promotionCalculator = new PromotionCalculator(promotions);
            var checkout            = new Checkout(priceReader, promotionCalculator);
            var item = new Item("B15");

            checkout.Scan(item);
            checkout.Scan(item);
            var total = checkout.Total();

            Assert.AreEqual(expectedTotal, total);
        }
Пример #10
0
        public void NullValueEntry()
        {
            List <CartSKU> cartItems = new List <CartSKU> {
                new CartSKU {
                    SKUName = "a", SKUQuantity = 3
                },
                new CartSKU {
                    SKUName = "b", SKUQuantity = 5
                },
                new CartSKU {
                    SKUName = "c", SKUQuantity = 0
                },
                new CartSKU {
                    SKUName = "d", SKUQuantity = 1
                }
            };
            PromotionCalculator PromoCalObj = new PromotionCalculator(new PromotionSKUObj());
            int Total = PromoCalObj.GetCartTotalAmount(cartItems);

            //Assert
            Assert.AreEqual(265, Total);
        }