public void TestInitialize()
        {
            _items = new Items();
            _halfPriceDiscountItem = new HalfPriceDiscountItem();

            _halfPriceDiscount = new HalfPriceDiscount(_halfPriceDiscountItem, _items);
        }
Esempio n. 2
0
        public void PercentageDiscount_CalculateAppliedDiscount_HalfPriceDiscount()
        {
            var basket    = new List <ProductQuantity>();
            var discounts = new List <IDiscount>();
            var product   = new Product()
            {
                Id    = 1,
                Name  = "Apples",
                Price = 100m
            };

            var productQuantity = new ProductQuantity()
            {
                Quantity = 1,
                Product  = product
            };

            basket.Add(productQuantity);

            var percentageDiscount = new HalfPriceDiscount(product, productQuantity);

            discounts.Add(percentageDiscount);

            var sut = new DiscountService();

            // Act
            var result = sut.CalculateBasketDiscounts(basket, discounts);

            // Assert
            Assert.Equal(result.Any(), true);
            Assert.Equal(result[0].Type, DiscountType.HalfPrice);
            Assert.Equal(result[0].Amount, 50.00m);
            Assert.Equal(result[0].Description, "Apples 50% OFF: - 50p");
        }
        public void HalfPriceDiscount_CalculateAppliedDiscount_WithQuantity_4OrMore()
        {
            // Arrange
            var percentageDiscount = new HalfPriceDiscount(new ProductQuantity
            {
                Product = new Product
                {
                    ProductId = 2,
                    Name      = "Beans"
                },
                Quantity = 4
            },
                                                           new DiscountedProduct()
            {
                ProductId = 3,
                Name      = "Bread"
            });

            // Act
            var result = percentageDiscount.DiscountsApplicable(ProductQuantityHelper.CreateProductsForHalfPriceDiscounts()).ToArray();

            // Assert
            Assert.AreEqual(result.Any(), true);
            Assert.AreEqual(result[0].Type, DiscountType.HalfPrice);
            Assert.AreEqual(result[0].Amount, 0.40m);
            Assert.AreEqual(result[0].Text, "Bread 50% OFF: - 40p");
        }
        public async Task <List <IDiscount> > GetProductDiscounts()
        {
            var result = new List <IDiscount>();

            await Task.Delay(2);

            var productDiscont1 = new PercentageDiscount(GetProductById(4), 0.10m);

            result.Add(productDiscont1);


            var productDiscont2 = new HalfPriceDiscount(GetProductById(2), new ProductQuantity()
            {
                Product  = GetProductById(1),
                Quantity = 2
            });

            result.Add(productDiscont2);

            return(result);
        }
        public void HalfPriceDiscount_NoDiscountApplied_WithQuantity_20rMore()
        {
            // Arrange
            var percentageDiscount = new HalfPriceDiscount(new ProductQuantity
            {
                Product = new Product
                {
                    ProductId = 2,
                    Name      = "Beans"
                },
                Quantity = 2
            },
                                                           new DiscountedProduct()
            {
                ProductId = 4,
                Name      = "Milk"
            });

            // Act
            var result = percentageDiscount.DiscountsApplicable(ProductQuantityHelper.CreateProducts()).ToArray();

            // Assert
            Assert.AreEqual(result.Any(), false);
        }
Esempio n. 6
0
        public void RandomProductFor_PercentageDiscount_CalculateAppliedDiscount_HalfPriceDiscount(List <Product> products, HalfPriceDiscount halfPriceDiscount)
        {
            var discountRate = 0.5m;

            // Arrange
            halfPriceDiscount._productsThatQualifyBasketforDiscount.Quantity = 1;
            var productNames = products.Select(x => x.Name).ToList();

            productNames.Add(halfPriceDiscount._discountedProduct.Name);
            productNames.Add(halfPriceDiscount._productsThatQualifyBasketforDiscount.Product.Name);

            var disconts = new List <IDiscount>();

            disconts.Add(halfPriceDiscount);

            _productService.Setup(x => x.GetProductByName(halfPriceDiscount._discountedProduct.Name)).Returns(halfPriceDiscount._discountedProduct);
            _productService.Setup(x => x.GetProductByName(halfPriceDiscount._productsThatQualifyBasketforDiscount.Product.Name)).Returns(halfPriceDiscount._productsThatQualifyBasketforDiscount.Product);

            foreach (var item in products)
            {
                _productService.Setup(x => x.GetProductByName(item.Name)).Returns(item);
            }

            var sut    = new ShoppingBasketService(_productService.Object);
            var basket = sut.AddProducts(productNames.ToArray());
            var sutD   = new DiscountService();

            // Act
            var result = sutD.CalculateBasketDiscounts(basket, disconts);

            var subTotalPrice  = basket.Sum(item => item.Product.Price * item.Quantity);
            var totalPrice     = subTotalPrice - result.Sum(item => item.Amount);
            var discontMessage = string.Join(" --- ", result.Select(x => x.Description));

            // Assert
            Assert.Equal(subTotalPrice - totalPrice, halfPriceDiscount._discountedProduct.Price * discountRate);
        }
 public void HalfPriceDiscount_DiscountedProduct_IsNull_ExceptionThrown()
 {
     // Arrange + Act + Assert
     var halfPriceDiscount = new HalfPriceDiscount(new ProductQuantity(), null);
 }
 public void HalfPriceDiscount_ProductsThatQualifyBasketforDiscount_IsNull_ExceptionThrown()
 {
     // Arrange + Act + Assert
     var halfPriceDiscount = new HalfPriceDiscount(null, new DiscountedProduct());
 }