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****************"); }
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); }
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); }
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); }
public BookTest() { packingSlipGeneratorMock = new Mock <IPackingSlipGenerator>(); bookProductProcessor = new PhysicalProductProcessor(packingSlipGeneratorMock.Object); }