コード例 #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 Calculate2DiscountTest()
        {
            // Arrange
            ICanDiscountStrategy canDiscountStrategy = new HappyHoursCanDiscountStrategy(
                TimeSpan.Parse("12:30"),
                TimeSpan.Parse("14:00"));

            IDiscountStrategy discountStrategy = new FixedDiscountStrategy(5);

            OrderCalculator orderCalculator = new OrderCalculator(canDiscountStrategy, discountStrategy);

            Order order = new Order("ZAM 001/2018", new Customer("M", "S"));

            order.CreateDate = DateTime.Parse("2018-06-19 12:30");

            Product product1 = new Product("Monitor", 1000);

            order.Details.Add(new OrderDetail(product1, 10));

            // Acts
            decimal discount = orderCalculator.CalculateDiscount(order);

            // Asserts
            Assert.AreEqual(5, discount);
        }
コード例 #3
0
        public void HappyHoursTest()
        {
            // Arrange

            Customer customer = new Customer("Marcin", "Sulecki");

            var order = new Order(customer)
            {
                OrderNumber = "ZAM 001/2018",
                OrderDate   = DateTime.Parse("2018-03-26 15:00")
            };

            var monitor = new Product("Monitor", 200);
            var keboard = new Product("Keyboard", 199);
            var develop = new Service("Programowanie", 100);

            order.Details.Add(new OrderDetail(keboard));
            order.Details.Add(new OrderDetail(monitor, 2));
            order.Details.Add(new OrderDetail(develop, 5));

            //IPromotionStrategy strategy = new HappyHoursPromotionStrategy(
            //    TimeSpan.FromHours(9),
            //    TimeSpan.FromHours(16),
            //    0.1m);

            IDiscountValidator discountValidator = new HappyHoursDiscountValidator(
                TimeSpan.FromHours(9),
                TimeSpan.FromHours(16));

            IDiscountCalculator discountCalculator = new PercentageDiscountCalculator(0.1m);

            var calculator = new OrderCalculator(discountValidator, discountCalculator);

            calculator.Log += LogToConsole;
            calculator.Log += LogToTrace;

            calculator.Log += Console.WriteLine;

            // metoda anonimowa
            calculator.Log += delegate(string message)
            {
                Console.WriteLine(message);
            };


            calculator.Log += message => Console.WriteLine(message);

            calculator.Log -= LogToConsole;

            var listeners = calculator.Log.GetInvocationList().ToList();

            calculator.Log = null;


            // Acts

            var totalAmount = order.TotalAmount;

            var discountAmount = calculator.CalculateDiscount(order);

            // Assert

            Assert.AreEqual(1099, totalAmount);
            Assert.AreEqual(109.9m, discountAmount);

            Assert.IsNotNull(order.Customer);
            Assert.IsNotNull(order.OrderNumber);
            Assert.AreEqual(3, order.Details.Count);
        }