Beispiel #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to order processing system !");

            var order = new OrderDto
            {
                ProductType = ProductType.Membership,
                Amount      = 100,
                Agent       = new AgentDto
                {
                    FirstName = "Rahul",
                    LastName  = "Dravid",
                    Email     = "*****@*****.**"
                }
            };

            var orderStatus = OrderStatus.Pending;

            Console.WriteLine($"Order is received for item { order.ProductType}");
            Console.WriteLine($"***************Processing starts****************");

            var processor = new PhysicalProductProcessor(new ConsolePrinter());

            processor.SetNext(new BookProcessor(new ConsolePrinter(), new PaymentManager()))
            .SetNext(new MembershipProcessor(new MembershipManager()))
            .SetNext(new UpgradeMembershipProcessor(new MembershipManager(), new EmailHandler()));

            orderStatus = processor.Process(order);

            Console.WriteLine($"The order status is : {orderStatus}");

            Console.WriteLine($"***************Processing ends****************");
        }
Beispiel #2
0
        public static IOrderProcess GetOrderProcessor(PaymentType type)
        {
            IOrderProcess _processOrder = null;

            switch (type)
            {
            case PaymentType.PHYSICAL_PRODUCT:
                _processOrder = new PhysicalProductProcessor();
                break;

            case PaymentType.BOOK:
                _processOrder = new BookProcessor();
                break;

            case PaymentType.MEMBERSHIP:
                _processOrder = new SubscriptionProcessor();
                break;

            case PaymentType.BOOKORPHYSICAL:
                _processOrder = new PhysicalOrBookProcessor();
                break;

            case PaymentType.VIDEO:
                _processOrder = new VideoProcesssor();
                break;

            default:
                break;
            }
            return(_processOrder);
        }
        public IPaymentProcessor CreateProcessor(RequestTypes requestTypes)
        {
            IPaymentProcessor paymentProcessor = null;

            switch (requestTypes)

            {
            case RequestTypes.Books:
            {
                paymentProcessor = new BookProcessor(_logger, _componentSupplier.GetComponents());
                break;
            }

            case RequestTypes.MemberShips:
            {
                paymentProcessor = new MemberShipProcessor(_logger, _componentSupplier.GetComponents());
                break;
            }

            case RequestTypes.UpgradeMemberShip:
            {
                paymentProcessor = new UpgradeMemberShipProcesor(_logger, _componentSupplier.GetComponents());
                break;
            }

            case RequestTypes.PhysicalProduct:
            {
                paymentProcessor = new PhysicalProductProcessor(_logger, _componentSupplier.GetComponents());
                break;
            }
            }


            return(paymentProcessor);
        }
Beispiel #4
0
        public void PhysicalProductProcessor_Process_ShouldProcessTheOrder_WhenOrderIsForPhysicalProduct()
        {
            var processor = new PhysicalProductProcessor(new ConsolePrinter());

            var order = new OrderDto
            {
                ProductType = ProductType.Physical,
                Amount      = 100,
                Agent       = new AgentDto
                {
                    FirstName = "Rahul",
                    LastName  = "Dravid",
                    Email     = "*****@*****.**"
                }
            };

            var result = processor.Process(order);

            Assert.AreEqual(OrderStatus.Success, result);
        }
Beispiel #5
0
        public void PhysicalProductProcessor_Process_ShouldPrintShippingSlip_WhenOrderIsValid()
        {
            var printerMock = new Mock <IPrinter>();

            printerMock.Setup(a => a.Print(It.IsAny <string>()));

            var processor = new PhysicalProductProcessor(printerMock.Object);

            var order = new OrderDto
            {
                ProductType = ProductType.Physical,
                Amount      = 100,
                Agent       = new AgentDto
                {
                    FirstName = "Rahul",
                    LastName  = "Dravid",
                    Email     = "*****@*****.**"
                }
            };

            var result = processor.Process(order);

            printerMock.Verify(a => a.Print(It.IsAny <string>()), Times.Once);
        }
        protected override IOrderProcessor GetOrderType()
        {
            IOrderProcessor order = new PhysicalProductProcessor();

            return(order);
        }
Beispiel #7
0
 public BookTest()
 {
     packingSlipGeneratorMock = new Mock <IPackingSlipGenerator>();
     bookProductProcessor     = new PhysicalProductProcessor(packingSlipGeneratorMock.Object);
 }