private void AddDiscountLineItems(Basket basket, int itemsToBeAdded, QuantityDiscountRule rule, bool reverse = false)
 {
     for (var i = 0; i < itemsToBeAdded; i++)
     {
         basket.LineItems.Add(new LineItem()
         {
             Quanity   = 1,
             Sku       = rule.OfferSku,
             UnitPrice = reverse? rule.DiscountAmount : -1 * rule.DiscountAmount
         });
     }
 }
        public void When_promotion_applies()
        {
            var productCatalog = new ProductCatalog();

            productCatalog.AddQuantityDiscount("apple", 3, 2);
            productCatalog.AddProduct("apple", 0.75m);
            var sut        = new QuantityDiscountRule(productCatalog);
            var promotions = new Promotions(new List <IPromotionalDiscountRule>()
            {
                sut
            });
            var lineItem = new LineItem("apple", 7, productCatalog, promotions);

            var actual = sut.PromotionApplies(lineItem);

            Assert.That(actual, Is.True);
        }
        public void When_calculating_rule()
        {
            var productCatalog = new ProductCatalog();

            productCatalog.AddQuantityDiscount("apple", 3, 2);
            productCatalog.AddProduct("apple", 0.75m);
            var sut        = new QuantityDiscountRule(productCatalog);
            var promotions = new Promotions(new List <IPromotionalDiscountRule>()
            {
                sut
            });
            var lineItem = new LineItem("apple", 7, productCatalog, promotions);

            var actual = sut.Calculate(lineItem);

            Assert.That(actual.DiscountedSubTotal, Is.EqualTo(4.75m));
            Assert.That(actual.DiscountNote, Is.EqualTo("***Discount on apple: Buy 3 apple for $2.00, New Price $4.75, Savings $0.50"));
        }