Esempio n. 1
0
        public void GetBillTest()
        {
            var productRepository  = new Mock <IRepository <Product> >();
            var discountRepository = new Mock <IRepository <IDiscount> >();
            var productList        = new List <Product>();
            var discountList       = new List <IDiscount>();
            var bread  = new Product(1, "Bread", 10);
            var butter = new Product(2, "Butter", 2);
            var milk   = new Product(3, "Milk", 6);

            productList.Add(bread);
            productList.Add(butter);
            productList.Add(milk);

            var simpleDiscount = new SimpleDiscount(1, bread, 2, bread, 0.5);

            discountList.Add(simpleDiscount);
            var requiredProducts   = new List <Tuple <Product, int> >();
            var discountedProducts = new List <Tuple <Product, double> >();

            requiredProducts.Add(new Tuple <Product, int>(milk, 2));
            requiredProducts.Add(new Tuple <Product, int>(bread, 1));
            discountedProducts.Add(new Tuple <Product, double>(butter, 1));
            discountedProducts.Add(new Tuple <Product, double>(bread, 0.4));
            var complexDiscount = new ComplexDiscount(2, requiredProducts, discountedProducts);

            discountList.Add(complexDiscount);

            productRepository.Setup(x => x.GetAll()).Returns(() => productList);
            discountRepository.Setup(x => x.GetAll()).Returns(() => discountList);
            var basket = new Basket(productRepository.Object, discountRepository.Object);

            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(2);
            basket.AddItem(3);
            basket.AddItem(3);

            var usedDiscounts = new List <IDiscount>()
            {
                complexDiscount
            };
            var expectedItemsLeftToCalculate = new List <int>()
            {
                1
            };
            var boughtItems = new Dictionary <int, double>()
            {
                { 2, 0 }, { 1, 26 }, { 3, 12 }
            };
            var total        = boughtItems.Sum(x => x.Value);
            var expectedBill = "Bread x 3 = $26\nButter x 1 = $0\nMilk x 2 = $12\nTotal: $38\nDiscounts:\nBuy 2 milks and 1 bread and get 1 butter for free and an extra bread at 40% off\n";

            Assert.AreEqual(expectedBill, basket.GetBill(usedDiscounts, boughtItems, total));
            Assert.Pass();
        }
Esempio n. 2
0
        public void SimpleDiscountCalculateSameProductDiscountTest()
        {
            var bread         = new Product(1, "Bread", 10);
            var discount      = new SimpleDiscount(1, bread, 1, bread, 0.5);
            var discountValue = discount.CalculateDiscount();

            Assert.AreEqual(5, discountValue);
            Assert.Pass();
        }
Esempio n. 3
0
        public void SimpleDiscountToStringTest()
        {
            var bread = new Product(1, "Bread", 10);
            var milk  = new Product(3, "Milk", 6);

            var discount       = new SimpleDiscount(1, bread, 2, milk, 0.6);
            var expectedResult = "Buy 2 breads and get an extra milk at 60% off";

            Assert.AreEqual(expectedResult, discount.ToString());
        }
Esempio n. 4
0
        public void SimpleDiscountCalculateDiscountTest()
        {
            var bread         = new Product(1, "Bread", 10);
            var butter        = new Product(2, "Butter", 2);
            var discount      = new SimpleDiscount(1, bread, 1, butter, 0.5);
            var discountValue = discount.CalculateDiscount();

            Assert.AreEqual(1, discountValue);
            Assert.Pass();
        }
Esempio n. 5
0
        public void CalculateRemainingProductsPriceTest()
        {
            var productRepository  = new Mock <IRepository <Product> >();
            var discountRepository = new Mock <IRepository <IDiscount> >();
            var productList        = new List <Product>();
            var discountList       = new List <IDiscount>();
            var bread  = new Product(1, "Bread", 10);
            var butter = new Product(2, "Butter", 2);
            var milk   = new Product(3, "Milk", 6);

            productList.Add(bread);
            productList.Add(butter);
            productList.Add(milk);

            var simpleDiscount = new SimpleDiscount(1, bread, 2, bread, 0.5);

            discountList.Add(simpleDiscount);
            var requiredProducts   = new List <Tuple <Product, int> >();
            var discountedProducts = new List <Tuple <Product, double> >();

            requiredProducts.Add(new Tuple <Product, int>(milk, 2));
            requiredProducts.Add(new Tuple <Product, int>(bread, 1));
            discountedProducts.Add(new Tuple <Product, double>(butter, 1));
            discountedProducts.Add(new Tuple <Product, double>(bread, 0.4));
            var complexDiscount = new ComplexDiscount(2, requiredProducts, discountedProducts);

            discountList.Add(complexDiscount);

            productRepository.Setup(x => x.GetAll()).Returns(() => productList);
            discountRepository.Setup(x => x.GetAll()).Returns(() => discountList);
            var basket = new Basket(productRepository.Object, discountRepository.Object);

            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(2);
            basket.AddItem(3);
            basket.AddItem(3);

            var itemsLeftToCalculate = new List <int>()
            {
                1
            };
            var boughtItems = new Dictionary <int, double>()
            {
                { 2, 0 }, { 1, 26 }, { 3, 12 }
            };
            var result = basket.CalculateRemainingProductsPrice(itemsLeftToCalculate, boughtItems);

            Assert.AreEqual(10, result);
            Assert.Pass();
        }
Esempio n. 6
0
        public void SimpleDiscountApplyToBasketWhereUnableTest()
        {
            var bread = new Product(1, "Bread", 10);
            var milk  = new Product(3, "Milk", 6);

            var discount       = new SimpleDiscount(1, bread, 2, milk, 0.6);
            var purchasedItems = new List <int>();

            purchasedItems.Add(1);
            purchasedItems.Add(2);
            purchasedItems.Add(2);
            purchasedItems.Add(3);
            var result = discount.ApplyToBasket(purchasedItems);

            Assert.AreEqual(null, result);
            Assert.Pass();
        }
Esempio n. 7
0
        public void SimpleDiscountTest()
        {
            double amount   = SimpleDiscount.GetPresentValue(principal, rate, time);
            double discount = SimpleDiscount.GetDiscount(principal, rate, time);

            Assert.AreEqual(principal, SimpleDiscount.GetFutureValue(amount, rate, time));
            Assert.AreEqual(time, SimpleDiscount.GetTime(discount, principal, rate));
            Assert.AreEqual(rate, SimpleDiscount.GetRate(discount, principal, time));


            double amountRational   = SimpleDiscount.GetPresentValueRational(principal, rate, time);
            double discountRational = SimpleDiscount.GetDiscountRational(principal, rate, time);

            Assert.AreEqual(principal, SimpleDiscount.GetFutureValueRational(amountRational, rate, time));
            Assert.AreEqual(time, SimpleDiscount.GetTimeRational(principal, amountRational, rate));
            Assert.AreEqual(rate, SimpleDiscount.GetRateRational(principal, amountRational, time));
        }
Esempio n. 8
0
        public void GetOrderedDiscountsTest()
        {
            var productRepository  = new Mock <IRepository <Product> >();
            var discountRepository = new Mock <IRepository <IDiscount> >();
            var productList        = new List <Product>();
            var discountList       = new List <IDiscount>();
            var bread  = new Product(1, "Bread", 10);
            var butter = new Product(2, "Butter", 2);
            var milk   = new Product(3, "Milk", 6);

            productList.Add(bread);
            productList.Add(butter);
            productList.Add(milk);

            var discount1 = new SimpleDiscount(1, bread, 2, bread, 0.5);

            discountList.Add(discount1);
            var requiredProducts   = new List <Tuple <Product, int> >();
            var discountedProducts = new List <Tuple <Product, double> >();

            requiredProducts.Add(new Tuple <Product, int>(milk, 2));
            requiredProducts.Add(new Tuple <Product, int>(bread, 1));
            discountedProducts.Add(new Tuple <Product, double>(butter, 1));
            discountedProducts.Add(new Tuple <Product, double>(bread, 0.4));
            var discount2 = new ComplexDiscount(2, requiredProducts, discountedProducts);

            discountList.Add(discount2);
            var discount3 = new SimpleDiscount(3, butter, 3, milk, 0.2);

            discountList.Add(discount3);

            productRepository.Setup(x => x.GetAll()).Returns(() => productList);
            discountRepository.Setup(x => x.GetAll()).Returns(() => discountList);

            var basket          = new Basket(productRepository.Object, discountRepository.Object);
            var expectedResults = new List <IDiscount>()
            {
                discount2, discount1, discount3
            };

            Assert.AreEqual(basket.GetOrderedDisounts(), expectedResults);
            Assert.Pass();
        }
Esempio n. 9
0
        public void SimpleDiscountApplyToBasketTest()
        {
            var bread = new Product(1, "Bread", 10);
            var milk  = new Product(3, "Milk", 6);

            var discount       = new SimpleDiscount(1, bread, 2, milk, 0.6);
            var purchasedItems = new List <int>();

            purchasedItems.Add(1);
            purchasedItems.Add(1);
            purchasedItems.Add(1);
            purchasedItems.Add(3);
            var result         = discount.ApplyToBasket(purchasedItems);
            var expectedResult = new List <Tuple <int, double> >();

            expectedResult.Add(new Tuple <int, double>(1, 2));
            expectedResult.Add(new Tuple <int, double>(3, 0.4));
            Assert.AreEqual(expectedResult, result);
            Assert.Pass();
        }
Esempio n. 10
0
        public void GetDiscountedItemsTest()
        {
            var productRepository  = new Mock <IRepository <Product> >();
            var discountRepository = new Mock <IRepository <IDiscount> >();
            var productList        = new List <Product>();
            var discountList       = new List <IDiscount>();
            var bread  = new Product(1, "Bread", 10);
            var butter = new Product(2, "Butter", 2);
            var milk   = new Product(3, "Milk", 6);

            productList.Add(bread);
            productList.Add(butter);
            productList.Add(milk);

            var simpleDiscount = new SimpleDiscount(1, bread, 2, bread, 0.5);

            discountList.Add(simpleDiscount);
            var requiredProducts   = new List <Tuple <Product, int> >();
            var discountedProducts = new List <Tuple <Product, double> >();

            requiredProducts.Add(new Tuple <Product, int>(milk, 2));
            requiredProducts.Add(new Tuple <Product, int>(bread, 1));
            discountedProducts.Add(new Tuple <Product, double>(butter, 1));
            discountedProducts.Add(new Tuple <Product, double>(bread, 0.4));
            var complexDiscount = new ComplexDiscount(2, requiredProducts, discountedProducts);

            discountList.Add(complexDiscount);

            productRepository.Setup(x => x.GetAll()).Returns(() => productList);
            discountRepository.Setup(x => x.GetAll()).Returns(() => discountList);
            var basket = new Basket(productRepository.Object, discountRepository.Object);

            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(1);
            basket.AddItem(2);
            basket.AddItem(2);
            basket.AddItem(3);
            basket.AddItem(3);

            var purchasedItems        = new List <int>(basket.PurchasedItems);
            var usedDiscounts         = new List <IDiscount>();
            var calculatedItems       = basket.GetDiscountedItems(usedDiscounts, purchasedItems);
            var expectedUsedDiscounts = new List <IDiscount>()
            {
                complexDiscount, simpleDiscount
            };
            var expectedItemsLeftToCalculate = new List <int>()
            {
                2
            };
            var expectedCalculatedItems = new Dictionary <int, double>()
            {
                { 2, 0 }, { 1, 41 }, { 3, 12 }
            };

            Assert.AreEqual(expectedUsedDiscounts, usedDiscounts);
            Assert.AreEqual(expectedItemsLeftToCalculate, purchasedItems);
            Assert.AreEqual(calculatedItems, expectedCalculatedItems);
            Assert.Pass();
        }