コード例 #1
0
        public static void Test()
        {
            Product product1 = new Product
            {
                Name = "Szkolenie",
                UnitPrice = 100,
            };

            Order order = new Order
            {
                Details = new List<OrderDetail>
                {
                    new OrderDetail(product1, 2),
                    new OrderDetail(product1, 1),
                }
            };


            // IValidatorStrategy validatorStrategy = new HappyHoursValidatorStrategy(TimeSpan.FromHours(9), TimeSpan.FromHours(17));
            IValidatorStrategy validatorStrategy = new PeriodValidatorStrategy(new Period(DateTime.Parse("2018-06-01"), DateTime.Parse("2018-06-30")));

            IDiscountStrategy discountStrategy = new PercentageDiscountStrategy(0.1m);

            OrderCalculator calculator = new OrderCalculator(validatorStrategy, discountStrategy);

            var discount = calculator.CalculateDiscount(order);

            var finalAmount = order.TotalAmount - discount;

            Console.WriteLine($"Original amount: {order.TotalAmount} discount: {discount} finalAmount: {finalAmount}");


        }
コード例 #2
0
        public void CalculateDiscount3Test()
        {
            // Arrange
            Customer customer = new Customer(1, "Sulecki");
            Order    order    = Order.Create(customer);

            order.OrderDate = DateTime.Parse("2018-09-14");

            Product product = new Product("Mouse", 100, "Red");
            Service service = new Service("Developing", 100);

            order.AddDetail(new OrderDetail(product, 10));
            order.AddDetail(new OrderDetail(service, 4));

            ICanDiscountStrategy canDiscount = new OverLimitDiscountStrategy(1000);
            IDiscountStrategy    discount    = new PercentageDiscountStrategy(0.1m);

            IOrderCalculator calculator = new OrderCalculator2(canDiscount, discount);

            // Acts
            decimal result = calculator.Calculate(order);

            // Asserts
            Assert.True(result > 0);
            Assert.Equal(1260, result);

            // Polecam: Install-Package FluentAssertions
        }
コード例 #3
0
        public void OrderDiscountCalculatorTest()
        {
            // Arrange
            AddArticlesTest();

            Customer customer = new Customer();

            Article product1 = articlesService.Get(1);

            Order order = new Order("ZAM 1/2018", customer);

            order.OrderDate = DateTime.Parse("2018-04-13");
            order.AddArticle(product1, 2);

            IRuleStrategy ruleStrategy = new HappyDayRuleStrategy(DayOfWeek.Friday);

            //IRuleStrategy<Order> ruleStrategy
            //    = new DelegateRuleStrategy<Order>(o => o.OrderDate.DayOfWeek == DayOfWeek.Friday);

            IDiscountStrategy discountStrategy = new PercentageDiscountStrategy(0.3m);

            OrderDiscountCalculator calculator = new OrderDiscountCalculator(ruleStrategy, discountStrategy);

            // Acts
            calculator.Calculate(order);

            // Assets
            Assert.AreEqual(6, order.DiscountAmount);
            Assert.IsTrue(order.HasDiscount);
        }
コード例 #4
0
        public void ShouldDiscountPercentage()
        {
            long price = 1000;

            percentageDiscountStrategy = new PercentageDiscountStrategy(price);
            long discount = percentageDiscountStrategy.Discount();

            Assert.Equal(150, discount);
        }
コード例 #5
0
ファイル: SaleTests.cs プロジェクト: cmenzi/gof
        public void PercentageDiscount_WhenInitialAmountIs_100_And_20PercentDiscountProvided_ThenReturn80()
        {
            // Arrange
            var pricingStrategy = new PercentageDiscountStrategy(20);
            var sale            = new Sale(100, pricingStrategy);

            // Act
            var total = sale.GetTotal();

            // Assert
            total.Should().Be(80);
        }