Пример #1
0
        public void FreeProductDiscountApplicationTestNonApplication()
        {
            var testDiscount = new FreeProductDiscount("Test2", 3);
            var testItems    = new List <ITotalCostCalculationItem>();
            var testItem1    = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test1", UnitPrice = 1
                }, Quantity = 4
            });

            testItems.Add(testItem1);
            var discountedItems = testDiscount.ApplyDiscount(testItems);

            Assert.IsNotNull(discountedItems);
            TestUtil.AssertEqualTotalCostCalculationItemLists(testItems, discountedItems);
            var testItem2 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test2", UnitPrice = 1
                }, Quantity = 2
            });

            testItems.Add(testItem2);
            discountedItems = testDiscount.ApplyDiscount(testItems);
            TestUtil.AssertEqualTotalCostCalculationItemLists(testItems, discountedItems);
        }
Пример #2
0
        public void FreeProductDiscountApplicationTestMultipleApplication()
        {
            var testDiscount = new FreeProductDiscount("Test2", 3);
            var testItems    = new List <ITotalCostCalculationItem>();
            var testItem1    = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test1", UnitPrice = 1
                }, Quantity = 4
            });
            var testItem2 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test2", UnitPrice = 2
                }, Quantity = 12
            });

            testItems.Add(testItem1);
            testItems.Add(testItem2);
            var discountedItems = testDiscount.ApplyDiscount(testItems);

            var discountedTest1 = discountedItems.FirstOrDefault(x => x.ProductName == "Test1");

            Assert.IsNotNull(discountedTest1);
            TestUtil.AssertEqualTotalCostCalculationItems(testItem1, discountedTest1);

            var discountedTest2 = discountedItems.FirstOrDefault(x => x.ProductName == "Test2");

            Assert.IsNotNull(discountedTest2);
            Assert.AreEqual(testItem2.ProductName, discountedTest2.ProductName);
            Assert.AreEqual(testItem2.ProductUnitPrice, discountedTest2.ProductUnitPrice);
            Assert.AreEqual(testItem2.ProductQuantity, discountedTest2.ProductQuantity);
            //four Test2 should be free, so the discount is four times Test2 UnitPrice
            Assert.AreEqual(8M, discountedTest2.Discount);
        }
        public void CombinationDiscountApplicableTest()
        {
            var testDiscount = new CombinationDiscount("Test2", 3, "Test1", 0.5M);

            var testItems = new List <ITotalCostCalculationItem>();
            var testItem1 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test1", UnitPrice = 5
                }, Quantity = 4
            });

            testItems.Add(testItem1);
            Assert.IsFalse(testDiscount.IsDiscountApplicable(testItems));

            var testItem2 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test2", UnitPrice = 1
                }, Quantity = 2
            });

            testItems.Add(testItem2);
            Assert.IsFalse(testDiscount.IsDiscountApplicable(testItems));

            testItems.Remove(testItem2);
            testItem2 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test2", UnitPrice = 1
                }, Quantity = 5
            });

            testItems.Add(testItem2);
            Assert.IsTrue(testDiscount.IsDiscountApplicable(testItems));
        }
        public void CombinationDiscountApplicationTestBasicApplication()
        {
            var testDiscount = new CombinationDiscount("Test2", 3, "Test1", 0.5M);
            var testItems    = new List <ITotalCostCalculationItem>();
            var testItem1    = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test1", UnitPrice = 5
                }, Quantity = 4
            });

            var testItem2 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test2", UnitPrice = 3
                }, Quantity = 4
            });

            testItems.Add(testItem1);
            testItems.Add(testItem2);
            var discountedItems = testDiscount.ApplyDiscount(testItems);

            var discountedTest2 = discountedItems.FirstOrDefault(x => x.ProductName == "Test2");

            Assert.IsNotNull(discountedTest2);
            TestUtil.AssertEqualTotalCostCalculationItems(testItem2, discountedTest2);

            var discountedTest1 = discountedItems.FirstOrDefault(x => x.ProductName == "Test1");

            Assert.IsNotNull(discountedTest1);
            Assert.AreEqual(testItem1.ProductName, discountedTest1.ProductName);
            Assert.AreEqual(testItem1.ProductUnitPrice, discountedTest1.ProductUnitPrice);
            Assert.AreEqual(testItem1.ProductQuantity, discountedTest1.ProductQuantity);

            //50% off for one Test1
            Assert.AreEqual(2.5M, discountedTest1.Discount);
        }
        public void CombinationDiscountApplicationTestMultipleEnoughQuantity()
        {
            var testDiscount = new CombinationDiscount("Test2", 3, "Test1", 0.5M);
            var testItems    = new List <ITotalCostCalculationItem>();
            var testItem1    = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test1", UnitPrice = 5
                }, Quantity = 8
            });

            var testItem2 = new TotalCostCalculationItem(new ShoppingCartItem {
                Product = new Product {
                    Name = "Test2", UnitPrice = 3
                }, Quantity = 12
            });

            testItems.Add(testItem1);
            testItems.Add(testItem2);
            var discountedItems = testDiscount.ApplyDiscount(testItems);

            var discountedTest2 = discountedItems.FirstOrDefault(x => x.ProductName == "Test2");

            Assert.IsNotNull(discountedTest2);
            TestUtil.AssertEqualTotalCostCalculationItems(testItem2, discountedTest2);

            var discountedTest1 = discountedItems.FirstOrDefault(x => x.ProductName == "Test1");

            Assert.IsNotNull(discountedTest1);
            Assert.AreEqual(testItem1.ProductName, discountedTest1.ProductName);
            Assert.AreEqual(testItem1.ProductUnitPrice, discountedTest1.ProductUnitPrice);
            Assert.AreEqual(testItem1.ProductQuantity, discountedTest1.ProductQuantity);

            // the threshold is met 4 times and we have 8 items of which we can discount 4
            // so 4*(Test1UnitPrice)*0.5
            Assert.AreEqual(10M, discountedTest1.Discount);
        }