Esempio n. 1
0
        public void Get_Total_Amount_After_Discounts_With_Coupon_Should_Return_Correct_Price()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var couponDiscountAmount = 50;

            var tShirtCategory = new Category("TShirt");
            var jacketCategory = new Category("Jacket");

            var poloTShirt    = new Product("Polo TShirt", 120, tShirtCategory);
            var kotonTShirt   = new Product("Koton TShirt", 40, tShirtCategory);
            var lacosteTShirt = new Product("Lacoste TShirt", 220, tShirtCategory);
            var zaraJacket    = new Product("Zara Jacket", 260, jacketCategory);

            shoppingCart.AddItem(poloTShirt, 2);
            shoppingCart.AddItem(kotonTShirt);
            shoppingCart.AddItem(lacosteTShirt);
            shoppingCart.AddItem(zaraJacket);

            var campaigns = new List <Discount>();
            var coupon    = new AmountCoupon(couponDiscountAmount, 300);

            shoppingCart.ApplyDiscounts(campaigns);
            shoppingCart.ApplyCoupon(coupon);

            var totalAmount = shoppingCart.GetTotalAmountAfterDiscounts();

            // ( (120 * 2) + 40 + 220 ) + 260 => 760 - 50 => 710

            Assert.True(totalAmount == shoppingCart.TotalItemPrice - couponDiscountAmount);
        }
Esempio n. 2
0
        public void Add_Item_With_Null_Object_Should_Return_Argument_Null_Exception()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            Product product = null;

            Assert.Throws <ArgumentNullException>(() => shoppingCart.AddItem(product));
        }
Esempio n. 3
0
        public void Apply_Coupon_With_Null_Object_Should_Return_Argument_Null_Exception()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            Coupon coupon = null;

            Assert.Throws <ArgumentNullException>(() => shoppingCart.ApplyCoupon(coupon));
        }
Esempio n. 4
0
        public void Remove_Item_With_Negative_Quantity_Should_Return_Argument_Exception()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 120, tShirtCategory);

            Assert.Throws <ArgumentException>(() => shoppingCart.RemoveItem(poloTShirt, -3));
        }
Esempio n. 5
0
        public void Apply_Coupon_Should_Add_The_Coupon_To_The_Cart()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var coupon = new AmountCoupon(50, 300);

            shoppingCart.ApplyCoupon(coupon);

            Assert.NotNull(shoppingCart.Coupon);
        }
Esempio n. 6
0
        public void Add_Item_With_Quantity_Should_Add_Correct_Amount_Of_Items_To_The_Cart()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 120, tShirtCategory);

            shoppingCart.AddItem(poloTShirt, 3);

            Assert.True(shoppingCart.Items.Single(y => y.Product.Title == poloTShirt.Title).Quantity == 3);
        }
Esempio n. 7
0
        public void Add_Item_Should_Add_The_Item_To_The_Cart()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 120, tShirtCategory);

            shoppingCart.AddItem(poloTShirt);

            Assert.Contains(shoppingCart.Items, y => y.Product.Title == poloTShirt.Title);
        }
Esempio n. 8
0
        public void Add_Item_Should_Increase_Quantity_If_The_Product_Is_Exist_In_The_Cart()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 120, tShirtCategory);

            shoppingCart.AddItem(poloTShirt, 3);
            shoppingCart.AddItem(poloTShirt);

            Assert.True(shoppingCart.Items.Single(y => y.Product.Title == poloTShirt.Title).Quantity == 4);
        }
Esempio n. 9
0
        public void Remove_Item_With_Quantity_That_Is_More_Than_Whats_In_The_Cart_Should_Return_Zero()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 120, tShirtCategory);

            shoppingCart.AddItem(poloTShirt);
            shoppingCart.RemoveItem(poloTShirt, 2);

            Assert.True(shoppingCart.Items.Single(y => y.Product.Title == poloTShirt.Title).Quantity == 0);
        }
Esempio n. 10
0
        public void Apply_Coupon_Should_Replace_The_Previous_Coupon_In_The_Cart()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var coupon = new AmountCoupon(50, 300);

            shoppingCart.ApplyCoupon(coupon);

            var coupon2 = new AmountCoupon(50, 200);

            shoppingCart.ApplyCoupon(coupon2);

            Assert.True(shoppingCart.Coupon.MinimumAmountToApply == 200);
        }
Esempio n. 11
0
        public void Apply_Discounts_Should_Not_Add_Any_Discount_To_The_Cart_If_No_Campaign_Is_Available()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 100, tShirtCategory);

            var campaigns = new List <Discount>();

            shoppingCart.AddItem(poloTShirt, 2);

            shoppingCart.ApplyDiscounts(campaigns);

            Assert.Null(shoppingCart.Campaign);
        }
Esempio n. 12
0
        public void Apply_Discounts_With_A_Campaign_That_Does_Not_Satisfy_Minimum_Product_Quantity_Should_Not_Add_The_Discount_To_The_Cart()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 120, tShirtCategory);

            var campaigns = new List <Discount>();

            shoppingCart.AddItem(poloTShirt);

            var tShirtCampaign = new RateCampaign(20, 2, tShirtCategory);

            campaigns.Add(tShirtCampaign);

            shoppingCart.ApplyDiscounts(campaigns);

            Assert.Null(shoppingCart.Campaign);
        }
Esempio n. 13
0
        public void Apply_Discounts_Should_Add_A_Discount_To_The_Cart_Which_Has_The_Maximum_Discount_Among_All_Campaigns()
        {
            var calc         = new Mock <IDeliveryCostCalculator>();
            var shoppingCart = new Core.ShoppingCart(calc.Object);

            var tShirtCategory = new Category("TShirt");
            var poloTShirt     = new Product("Polo TShirt", 100, tShirtCategory);
            var kotonTShirt    = new Product("Koton TShirt", 40, tShirtCategory);

            var campaigns = new List <Discount>();

            shoppingCart.AddItem(poloTShirt, 2);
            shoppingCart.AddItem(kotonTShirt, 5);

            var tShirtCampaign  = new RateCampaign(10, 3, tShirtCategory);
            var tShirtCampaign2 = new AmountCampaign(100, 5, tShirtCategory);

            campaigns.Add(tShirtCampaign);
            campaigns.Add(tShirtCampaign2);

            shoppingCart.ApplyDiscounts(campaigns);

            Assert.True(shoppingCart.Campaign == tShirtCampaign2);
        }