コード例 #1
0
        public void Calculate_ShouldThrowException_WithNullProducts()
        {
            // Arrange
            IDateTimeUtil dateTimeUtil = new DateTimeUtil();
            ITimespanDiscountCalculator timespanDiscountCalculator = new TimespanDiscountCalculator(dateTimeUtil);

            // Act & Assert
            Assert.Throws <ArgumentNullException>(() => timespanDiscountCalculator.Calculate(null, null));
        }
コード例 #2
0
        public void Calculate_ShouldReturnDiscountResult_WithCorrectProductsAndModel()
        {
            // Arrange
            Mock <IDateTimeUtil> mockDateTimeUtil = new Mock <IDateTimeUtil>();

            mockDateTimeUtil.Setup(x => x.Now()).Returns(new DateTime(2020, 10, 15));
            ITimespanDiscountCalculator timespanDiscountCalculator = new TimespanDiscountCalculator(mockDateTimeUtil.Object);
            List <Product> products = new List <Product>()
            {
                new Product()
                {
                    Id = 1, Name = "Beans", PluralName = "Beans", Price = 0.65m
                },
                new Product()
                {
                    Id = 2, Name = "Bread", PluralName = "Breads", Price = 0.8m
                },
                new Product()
                {
                    Id = 3, Name = "Milk", PluralName = "Milk", Price = 1.3m
                },
                new Product()
                {
                    Id = 4, Name = "Apple", PluralName = "Apples", Price = 1.0m
                },
            };
            TimespanDiscount timespanDiscount = new TimespanDiscount()
            {
                Id                 = 1,
                BuyingProduct      = products[3],
                From               = new DateTime(2020, 10, 10),
                To                 = new DateTime(2020, 10, 20),
                DiscountedProduct  = products[3],
                DiscountPercentage = 0.1f,
                IsActive           = true
            };
            IEnumerable <BasketItem> items = new List <BasketItem>()
            {
                new BasketItem()
                {
                    Product = new BasketItemProduct()
                    {
                        Id = 4, Name = "Apple", PluralName = "Apples", Price = 1.0m
                    },
                    Quantity = 1
                },
            };

            // Act
            DiscountResult discountResult = timespanDiscountCalculator.Calculate(items, timespanDiscount);

            // Assert
            Assert.Equal(0.1f, discountResult.DiscountPercentage);
            Assert.Equal(0.10m, discountResult.DiscountedPrice);
            Assert.Equal("Apples", discountResult.ProductPluralName);
        }