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(); }
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()); }
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); }
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); }
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); }
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); }
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); }
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); }