public void Given_BulkDiscountIsCreated_ThenReturnsBaseClassType()
        {
            var product      = new ProductUnit("Book", 10.0m);
            var bulkDiscount = new BulkDiscount(product, "Buy 2 gets 1 free", 2, 1);

            Assert.IsAssignableFrom <Discount>(bulkDiscount);
        }
Example #2
0
        private IFinalPrice UseBulkDiscount(IFinalPrice cart, ref string view)
        {
            var bulkDiscount = new BulkDiscount(cart, _discountVariablesRepository);

            bulkDiscount.AdjustPriceByBulkDiscount();
            view += "Bulk discount adjustment    : $" + cart.GetAdjustment() * -1 + " \n";
            view += "Price after bulk discount   : $" + cart.GetFinalPrice() + " \n";

            return(bulkDiscount.AdjustedCart);
        }
        public void Given_BulkDiscount_WhenCreateBulkDiscount_ThenReturns_BulkDiscountObject()
        {
            var product      = new ProductUnit("Book", 10.0m);
            var bulkDiscount = new BulkDiscount(product, "Buy 2 gets 1 free", 2, 1);

            Assert.NotNull(bulkDiscount.Product);
            Assert.Equal("Buy 2 gets 1 free", bulkDiscount.Name);
            Assert.Equal(2, bulkDiscount.ThresholdQuantity);
            Assert.Equal(1, bulkDiscount.QuantityOff);
        }
Example #4
0
        public void Cannot_calculate_bulk_discount_for_invalid_cart_products_list()
        {
            //setup
            var bulkDiscountProduct = new Product(code: "9501101530003", name: "Nutella", price: 5);
            var bulkDiscountList    = new BulkDiscount(bulkDiscountProducts: new[] { bulkDiscountProduct }, quantity: 2);

            Assert.Throws <ApplicationException>(() =>
                                                 bulkDiscountList.Calculate(cartProducts: null, cartSubtotal: 100));
            Assert.Throws <ApplicationException>(() =>
                                                 bulkDiscountList.Calculate(cartProducts: new List <CartProduct>(), cartSubtotal: 100));
        }
Example #5
0
        public void Can_calculate_price_for_bulk_discount_product()
        {
            //setup
            var product          = new Product(code: "9501101530004", name: "Nutella", price: 5);
            var bulkDiscountList = new BulkDiscount(bulkDiscountProducts: new[] { product }, quantity: 3);
            var sut = new CashRegister(products: new[] { product }, discounts: new [] { bulkDiscountList });

            //act
            sut.Scan(product.Code);
            sut.Scan(product.Code);
            sut.Scan(product.Code);
            var totalPrice = sut.CalculatePrice();

            //3 * 5 - 5 = 10
            Assert.That(totalPrice, Is.EqualTo(10m));
        }
Example #6
0
        public void Can_calculate_price_for_bulk_discount_product_and_regular_price_product()
        {
            //setup
            var regularPriceProduct = new Product(code: "9501101530004", name: "Chewing gum", price: 1.50m);
            var bulkDiscountProduct = new Product(code: "9501101530003", name: "Nutella", price: 5);
            var bulkDiscountList    = new BulkDiscount(bulkDiscountProducts: new[] { bulkDiscountProduct }, quantity: 2);
            var sut = new CashRegister(products: new[] { regularPriceProduct, bulkDiscountProduct }, discounts: new[] { bulkDiscountList });

            //act
            sut.Scan(regularPriceProduct.Code);
            sut.Scan(regularPriceProduct.Code);
            sut.Scan(bulkDiscountProduct.Code);
            sut.Scan(bulkDiscountProduct.Code);
            sut.Scan(bulkDiscountProduct.Code);
            var totalPrice = sut.CalculatePrice();

            //(1.50 * 2) + (5 * 3) - 5 = 13
            Assert.That(totalPrice, Is.EqualTo(13m));
        }
Example #7
0
        public void Can_get_several_bulk_discounts()
        {
            /* TODO: need to implement further calculation for cases
             * like the following:
             * if product quantity required to get a discount is 2, but
             * shopping cart has 4 such products
             */

            //setup
            var product             = new Product(code: "9501101530004", name: "Nutella", price: 5);
            var bulkDiscountProduct = new BulkDiscount(bulkDiscountProducts: new[] { product }, quantity: 2);
            var sut = new CashRegister(new[] { product }, new[] { bulkDiscountProduct });

            //act
            sut.Scan(product.Code);
            sut.Scan(product.Code);
            sut.Scan(product.Code);
            sut.Scan(product.Code);

            var totalPrice = sut.CalculatePrice();

            Assert.That(totalPrice, Is.EqualTo(10));
        }