public void FixedPriceLineItemWithCouponDiscountHasCorrectPriceTest()
        {
            // Arrange
            // unitPrice = 10.00m
            ILineItem     fixedPriceLineItem1 = new FixedPriceLineItem(1); // quantity defaults to 1
            ILineItem     fixedPriceLineItem2 = new FixedPriceLineItem(1, 4);
            const decimal expectedPrice1      = 10.00m;
            const decimal expectedPrice2      = 25.00m;

            // Does not qualify for discount since price < discount
            CouponDiscountLineItem couponDiscountLineItem1 = new CouponDiscountLineItem(fixedPriceLineItem1)
            {
                CouponDiscount = 15.00m
            };

            // Qualifies for discount since price > discount
            CouponDiscountLineItem couponDiscountLineItem2 = new CouponDiscountLineItem(fixedPriceLineItem2)
            {
                CouponDiscount = 15.00m
            };

            // Act
            decimal actualPrice1 = couponDiscountLineItem1.GetPrice();
            decimal actualPrice2 = couponDiscountLineItem2.GetPrice();

            // Assert
            Assert.Multiple(() =>
            {
                Assert.That(actualPrice1, Is.EqualTo(expectedPrice1));
                Assert.That(actualPrice2, Is.EqualTo(expectedPrice2));
            });
        }
        public void FixedPriceLineItemWithBulkDiscountHasCorrectPriceTest()
        {
            // Arrange
            const int id       = 1;
            const int quantity = 3;
            // unitPrice = 10.00m
            ILineItem     fixedPriceLineItem = new FixedPriceLineItem(id, quantity);
            const decimal expectedPrice1     = 27.00m;
            const decimal expectedPrice2     = 30.00m;

            // Lineitem is above bulk discount threshold of $20.00, therefore has 10% discount
            BulkDiscountLineItem bulkDiscountLineItem1 = new BulkDiscountLineItem(fixedPriceLineItem)
            {
                DiscountThreshold  = 20.00m,
                DiscountPercentage = 10
            };

            // Lineitem is below bulk discount threshold of $40.00, therefore has no discount
            BulkDiscountLineItem bulkDiscountLineItem2 = new BulkDiscountLineItem(fixedPriceLineItem)
            {
                DiscountThreshold  = 40.00m,
                DiscountPercentage = 10
            };

            // Act
            decimal actualPrice1 = bulkDiscountLineItem1.GetPrice();
            decimal actualPrice2 = bulkDiscountLineItem2.GetPrice();

            // Assert
            Assert.Multiple(() =>
            {
                Assert.That(actualPrice1, Is.EqualTo(expectedPrice1));
                Assert.That(actualPrice2, Is.EqualTo(expectedPrice2));
            });
        }
        public void FixedPriceLineItemHasCorrectPriceTest()
        {
            // Arrange
            const int     id                 = 1;
            const int     quantity           = 3;
            ILineItem     fixedPriceLineItem = new FixedPriceLineItem(id, quantity);
            const decimal expectedPrice      = 30m;

            // Act
            decimal actualPrice = fixedPriceLineItem.GetPrice();

            // Assert
            Assert.That(actualPrice, Is.EqualTo(expectedPrice));
        }
        public void CouponDiscountWithNonPositiveDiscountPerecntageThrowsExceptionTest()
        {
            // Arrange
            ILineItem lineItem = new FixedPriceLineItem(1);

            // Assert
            Assert.Throws <Exception>(() =>
            {
                // ReSharper disable once UnusedVariable
                CouponDiscountLineItem bulkDiscountLineItem = new CouponDiscountLineItem(lineItem)
                {
                    CouponDiscount = -10m
                };
            }
                                      );
        }
Example #5
0
        public void ShoppingCartWithFixedPriceLineItemHasCorrectPriceTest()
        {
            // Arrange
            IShoppingCart shoppingCart       = new ShoppingCart();
            const int     id                 = 1;
            const int     quantity           = 3;
            ILineItem     fixedPriceLineItem = new FixedPriceLineItem(id, quantity);
            const decimal expectedPrice      = 30.00m;

            // Act
            shoppingCart.Add(fixedPriceLineItem);
            decimal actualPrice = shoppingCart.GetPrice();

            // Assert
            Assert.That(actualPrice, Is.EqualTo(expectedPrice));
        }
        public void BulkDiscountWithNonPositiveDiscountPerecntageThrowsExceptionTest()
        {
            // Arrange
            ILineItem lineItem = new FixedPriceLineItem(1);

            // Assert
            Assert.Throws <Exception>(() =>
            {
                // ReSharper disable once UnusedVariable
                BulkDiscountLineItem bulkDiscountLineItem = new BulkDiscountLineItem(lineItem)
                {
                    DiscountThreshold  = 20.00m,
                    DiscountPercentage = -10
                };
            }
                                      );
        }
        public void DoubleDiscountedLineItemHasCorrectPriceTest()
        {
            // Arrange
            // unitPrice = 10.00m
            ILineItem     fixedPriceLineItem = new FixedPriceLineItem(1, 3);
            const decimal expectedPrice      = 22.00m;

            BulkDiscountLineItem bulkDiscountLineItem = new BulkDiscountLineItem(fixedPriceLineItem)
            {
                DiscountThreshold  = 20.00m,
                DiscountPercentage = 10
            };

            CouponDiscountLineItem couponDiscountLineItem = new CouponDiscountLineItem(bulkDiscountLineItem)
            {
                CouponDiscount = 5.00m
            };

            // Act
            decimal actualPrice = couponDiscountLineItem.GetPrice();

            // Assert
            Assert.That(actualPrice, Is.EqualTo(expectedPrice));
        }