Beispiel #1
0
        static void Main(string[] args)
        {
            Category category1 = new Category("category1");
            Category category2 = new Category("category2");


            Product product1 = new Product("Product1", 100, category1);
            Product product2 = new Product("Product2", 50, category1);
            Product product3 = new Product("Product3", 40, category2);



            ICampaign rateCampaign   = new RateCampaign(20.0, 5, category1);
            ICampaign amountCampaing = new AmountCampaign(10.0, category2);

            IShoppingCart shoppingcart = new ShoppingCart(new DeliveryCost(1.5, 10));

            shoppingcart.AddProduct(product1, 12);
            shoppingcart.AddProduct(product2, 10);
            shoppingcart.AddProduct(product3, 11);

            List <ICampaign> campaigns = new List <ICampaign>();

            campaigns.Add(rateCampaign);
            campaigns.Add(amountCampaing);
            ICoupon rateCoupon = new RateCoupon(5.0, 3);

            shoppingcart.AddCampaign(campaigns);
            shoppingcart.AddCoupon(rateCoupon);
            double totalAmount = shoppingcart.GetTotalAmountAfterDiscounts();

            System.Console.WriteLine(shoppingcart.Print());
            System.Console.ReadLine();
        }
Beispiel #2
0
        public void CantUseCoupon_If_TotalAmount_Less_Than_CouponMinimumAmount()
        {
            RateCoupon rateCoupon = new RateCoupon("CanUseTest", 150, 50);
            Cart       cart       = new Cart();
            bool       result     = cart.ApplyCoupon(rateCoupon);

            Assert.False(result);
        }
        public void AddItemTest()
        {
            RateCoupon rateCoupon = new RateCoupon("RateTest", 150, 50);
            Cart       cart       = new Cart();
            Product    product    = new Product(3, "testProduct", 100, 5, 99, "");

            cart.AddItem(product, 2);
            Assert.Equal(cart.ProductList[0].Product, product);
        }
        public void IsCouponAppliedTest()
        {
            RateCoupon rateCoupon = new RateCoupon("RateTest", 150, 50);
            Cart       cart       = new Cart();
            Product    product    = new Product(3, "testProduct", 100, 5, 99, "");

            cart.AddItem(product, 2);
            Assert.False(cart.IsCouponApplied);
            cart.ApplyCoupon(rateCoupon);
            Assert.True(cart.IsCouponApplied);
        }
        public double GetCartTotalAmountAfterDiscounts(CartHelper.CartExamples cartExample, int productFirstQuantity, int productSecondQuantity, int productThirdQuantity, bool applyCoupon)
        {
            Cart cart = CartHelper.GetCart(cartExample, productFirstQuantity, productSecondQuantity, productThirdQuantity);

            if (applyCoupon)
            {
                Coupon coupon = new RateCoupon("100 TL üzeri %20 İndirim", 100, 20);
                cart.ApplyCoupon(coupon);
            }

            return(cart.GetCartTotalAmountAfterDiscounts());
        }
        public double GetCouponDiscount(CartHelper.CartExamples cartExample, int productPrice10Quantity, int productPrice250Quantity, int productPrice50Quantity, bool applyCoupon)
        {
            Cart cart = CartHelper.GetCart(cartExample, productPrice10Quantity, productPrice250Quantity, productPrice50Quantity);

            if (applyCoupon)
            {
                Coupon coupon = new RateCoupon("100 TL üzeri %20 İndirim", 100, 20);
                cart.ApplyCoupon(coupon);
            }

            return(cart.GetCouponDiscount());
        }
Beispiel #7
0
        public void It_should_create_coupon_with_rate_and_minimum_amount()
        {
            //Arrange
            double minimumCartAmount = 100;
            int    rateOfDiscount    = 10;

            //Act
            var discountType = DiscountType.Rate;
            var coupon       = RateCoupon.Create(minimumCartAmount, rateOfDiscount);

            //Verify
            coupon.DiscountType.Should().Be(discountType);
        }
Beispiel #8
0
        public void GetDiscount_WhenCalledForRateCoupon_ReturnsPercentageOfDiscount()
        {
            //Arrange
            double        discountRate     = 10;
            double        givenAmount      = 200;
            double        expectedDiscount = 20;
            CouponFactory factory          = new CouponFactory();
            RateCoupon    coupon           = factory.ProduceCoupon(50, discountRate, DiscountType.Rate) as RateCoupon;

            //Act
            double discount = coupon.GetDiscount(givenAmount);

            //Assert
            Assert.Equal(expectedDiscount, discount);
        }
Beispiel #9
0
        public void UseRateCoupon()
        {
            RateCoupon rateCoupon = new RateCoupon("RateTest", 150, 50);
            Cart       cart       = new Cart();
            Product    product    = new Product(3, "testProduct", 100, 5, 99, "");

            cart.AddItem(product, 2);
            bool result = cart.ApplyCoupon(rateCoupon);

            Assert.True(result);
            double totalAmountAfterDiscounts = cart.GetTotalAmountAfterDiscounts();

            Assert.Equal(100, totalAmountAfterDiscounts);
            double totalCouponDiscount = cart.GetCouponDiscount();

            Assert.Equal(100, totalCouponDiscount);
        }
Beispiel #10
0
        public void Get_Coupon_Discount_With_Rate_Coupon_Should_Return_The_Percentage_Of_The_Specified_Rate_Of_The_Applied_Coupon()
        {
            var calc = new Mock <IDeliveryCostCalculator>();

            Type type         = typeof(Core.ShoppingCart);
            var  shoppingCart = Activator.CreateInstance(type, calc.Object);

            int discountPercentage = 10;
            int totalCartAmount    = 500;

            var coupon = new RateCoupon(discountPercentage, 100);

            ((Core.ShoppingCart)shoppingCart).ApplyCoupon(coupon);

            MethodInfo method = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
                                .Where(x => x.Name == "GetCouponDiscount" && x.IsPrivate).First();

            var output = method.Invoke(shoppingCart, new object[] { totalCartAmount });

            Assert.True(Convert.ToInt32(output) == totalCartAmount * discountPercentage / 100);
        }
Beispiel #11
0
        public void It_should_not_apply_coupons_when_mimimum_amount_constraint_met()
        {
            //Arrange
            Category category = new Category("food");

            double minimumCartAmount = 200;
            int    rateOfDiscount    = 60;
            var    coupon            = RateCoupon.Create(minimumCartAmount, rateOfDiscount);

            var     cart  = new Cart();
            Product apple = new Product("Elma", 20, category);

            cart.AddItem(apple, 5);

            //Act
            cart.ApplyCoupon(coupon);

            //Verify
            cart.TotalAmountAfterDiscounts.Should().Be(100);
            cart.CouponDiscount.Should().Be(0);
        }
Beispiel #12
0
        static void Run(ICart cart, IDeliveryCostCalculator deliveryCostCalculator)
        {
            ICategory categoryConsumerElectronics = new Category("Consumer Electronics");
            IProduct  productAppleWatch           = new Product(categoryConsumerElectronics, "Apple Watch", 2000.0);
            IProduct  productAppleMacbookPro      = new Product(categoryConsumerElectronics, "Apple Macbook Pro", 10000.0);

            ICategory categoryToysAndGames = new Category("Toys & Games");
            IProduct  productLego          = new Product(categoryToysAndGames, "Lego Classic Pack", 100.0);

            cart.Add(productAppleWatch, 2);
            cart.Add(productAppleMacbookPro, 1);
            cart.Add(productLego, 10);

            ICollection <ICampaign> campaigns = new Collection <ICampaign>();
            ICollection <ICoupon>   coupons   = new Collection <ICoupon>();

            IRateCampaign   inapplicableRateCampaign = new RateCampaign(categoryToysAndGames, "80% discount on Toys & Games category", .5, true, true, 50000.0, 20);
            IAmountCampaign lowAmountCampaign        = new AmountCampaign(categoryConsumerElectronics, "100 TL discount on Toys & Games category", 100, false, false, 0.0, 0);
            IAmountCampaign bestAmountCampaign       = new AmountCampaign(categoryConsumerElectronics, "1400 TL discount on Toys & Games category", 1400, false, true, 0.0, 3);
            IAmountCoupon   inapplicableAmountCoupon = new AmountCoupon(5000, "5000 TL discount coupon", true, true, 50000, 50);
            IRateCoupon     lowRateCoupon            = new RateCoupon(.1, "10% discount coupon", false, false, 0.0, 0);
            IRateCoupon     bestRateCoupon           = new RateCoupon(.5, "50% discount coupon", true, true, 10000, 13);

            campaigns.Add(inapplicableRateCampaign);
            campaigns.Add(lowAmountCampaign);
            campaigns.Add(bestAmountCampaign);
            coupons.Add(inapplicableAmountCoupon);
            coupons.Add(lowRateCoupon);
            coupons.Add(bestRateCoupon);

            cart.ApplyDiscounts(campaigns, coupons);

            cart.DeliveryCost = deliveryCostCalculator.Calculate(cart);

            var response = cart.Print();

            Console.Write(response);
        }