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 PaymentResult HandleOrder(ProductDetails data) { _handler = GetHandlerByPaymentType(data.paymentOptions); var result = _handler.ProcessOrder(data); return(result); }
public void MoveToNextStep(IOrderProcess orderProcess) { foreach (OrderProcess op in OrderProcesses) { if (op.IncidentNumber == orderProcess.IncidentNumber) { op.MoveToNextStep(); break; } } }
public void ProcessOrder_BookName_Empty_Test() { //arrange var video = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.VIDEO).FirstOrDefault(); OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.VIDEO); video.Description = string.Empty; OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.VIDEO); var ex = Assert.Throws <InvalidOperationException>(() => OrderProcessHandler.ProcessOrder(video)); Assert.That(ex.Message, Is.EqualTo("Video Descrption is missing")); }
public void ProcessOrder_PhysicalProduct_Name_Empty_Test() { //arrange var product = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.PRODUCT_PHYSICAL).FirstOrDefault(); product.Name = string.Empty; OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.PHYSICAL_PRODUCT); //assert var ex = Assert.Throws <InvalidOperationException>(() => OrderProcessHandler.ProcessOrder(product)); Assert.That(ex.Message, Is.EqualTo("Product Name is missing")); }
public void ProcessOrder_BookName_Empty_Test() { //arrange var book = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.BOOKORPHYSICAL).FirstOrDefault(); book.AgentName = string.Empty; OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.BOOKORPHYSICAL); //assert var ex = Assert.Throws <InvalidOperationException>(() => OrderProcessHandler.ProcessOrder(book)); Assert.That(ex.Message, Is.EqualTo("Agent Name is missing")); }
public void ProcessOrder_BookName_Empty_Test() { //arrange var book = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.BOOK).FirstOrDefault(); book.Name = string.Empty; OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.BOOK); double royaltyAmount = book.Price * book.Quantity * book.Commission; //assert var ex = Assert.Throws <InvalidOperationException>(() => OrderProcessHandler.ProcessOrder(book)); Assert.That(ex.Message, Is.EqualTo("Book Name is missing")); }
public void When_I_Pass_Valid_PhysicalProduct_Order_it_should_process() { //arrange var physcialProduct = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.PRODUCT_PHYSICAL).FirstOrDefault(); OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.PHYSICAL_PRODUCT); //act var result = OrderProcessHandler.ProcessOrder(physcialProduct); //assert Assert.IsTrue(result.IsSuccess); Assert.AreEqual("Packing slip created for physical product", result.Message); }
public void When_I_Pass_Valid_BookOrder_it_should_process() { //arrange var book = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.BOOKORPHYSICAL).FirstOrDefault(); OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.BOOKORPHYSICAL); double Commission = (book.Price * book.Quantity) / 0.10; string message = "Commision paid to agent -" + Commission; //act var result = OrderProcessHandler.ProcessOrder(book); //assert Assert.IsTrue(result.IsSuccess); Assert.AreEqual(message, result.Message); }
public void When_I_Pass_Valid_VideoOrder_it_should_process() { //arrange var video = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.VIDEO).FirstOrDefault(); OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.VIDEO); video.Description = "TestVideos"; video.PackingDate = DateTime.Today; //act var result = OrderProcessHandler.ProcessOrder(video); //assert Assert.IsTrue(result.IsSuccess); Assert.AreEqual("Generated Packing slip", result.Message); }
public void When_I_Pass_Valid_BookOrder_it_should_process() { //arrange var book = GetProducts().Where(x => x.ProductType == Models.Constants.ProductTypes.BOOK).FirstOrDefault(); OrderProcessHandler = PaymentFactory.GetOrderProcessor(Models.Constants.PaymentType.BOOK); double royaltyAmount = book.Price * book.Quantity * book.Commission; string message = "Royalty slip created with Amount - " + royaltyAmount; //act var result = OrderProcessHandler.ProcessOrder(book); //assert Assert.IsTrue(result.IsSuccess); Assert.AreEqual(message, result.Message); }
public void VideoProcess() { // MOQ can be used to mock object Product _Project = new Product(); _Project.Name = "Video "; _Project.Description = "Video Order _Order = new Order(); _Order.ProductItem = _Project; _Order.PaymentTypeIs = PaymentTypes.Video; IOrderFactory factory = new OrderFactory(); IOrderProcess bookOrder = factory.GetOrder(4); int result = bookOrder.ProcessOrder(); Assert.Equals(result, 4); }
public void MemberShipProcess() { // MOQ can be used to mock object Product _Project = new Product(); _Project.Name = "Membership order"; _Project.Description = "Membership"; Order _Order = new Order(); _Order.ProductItem = _Project; _Order.PaymentTypeIs = PaymentTypes.MemberShip; IOrderFactory factory = new OrderFactory(); IOrderProcess bookOrder = factory.GetOrder(2); int result = bookOrder.ProcessOrder(); Assert.Equals(result, 2); }
public void UpgradeProcess() { // MOQ can be used to mock object Product _Project = new Product(); _Project.Name = "Upgrade Product"; _Project.Description = "My Test Physical Product"; Order _Order = new Order(); _Order.ProductItem = _Project; _Order.PaymentTypeIs = PaymentTypes.Upgrade; IOrderFactory factory = new OrderFactory(); IOrderProcess bookOrder = factory.GetOrder(3); int result = bookOrder.ProcessOrder(); Assert.Equals(result, 3); }
private static void ProcessPaymentOrder(int options) { int subscription = 0; var paymentType = (PaymentType)Enum.Parse(typeof(PaymentType), options.ToString()); if (options == 5 || options == 6) { paymentType = (PaymentType)Enum.Parse(typeof(PaymentType), "5".ToString()); subscription = options == 5 ? 1 : 2; // assign Subscription type } IOrderProcess processor = PaymentFactory.GetOrderProcessor(paymentType); var data = SampleData.GetSampleDataForOrder(paymentType, subscription); if (processor != null) { var result = processor.ProcessOrder(data); Console.WriteLine($"Hanlded Order of {paymentType.ToString()} and Result is {result.Message}\n"); } else { Console.WriteLine("Invalid operation"); } }
public CartController(IProductsRepository repo, IOrderProcess proc) { repository = repo; orderProcessor = proc; }
public OnlineOrderUseCase(IOrderProcess orderProcess, IOnlineOrderProcess orderOnlineProcess) { _orderProcess = orderProcess; _orderOnlineProcess = orderOnlineProcess; }
private ViewModels.OrderViewModel _processOrderRequest(OrderDataDTO orderDTO, string group) { IOrderProcess orderProcessFactory = null; if (Utils.ValidationUtils.IsDangerousString(orderDTO.OrderIdentifier, out int badidx)) { return new ViewModels.OrderViewModel() { ErrorMessage = "Invalid orderIdentifier" } } ; var orderViewModel = orderRepository.GetOrder(orderDTO.OrderIdentifier); var service = db.ServiceSettings.FirstOrDefault(ln => ln.ServiceUrl == group); if (service == null) { return new ViewModels.OrderViewModel() { ErrorMessage = "could not get service..." } } ; orderProcessFactory = Factories.OrderProcessFactory.GetOrderProcessImplementation(service.ServiceType); if (orderViewModel == null) { if (orderDTO.Items.Count == 0) { return new ViewModels.OrderViewModel() { ErrorMessage = BaseResource.Get("NoItemsForOrder") } } ; orderViewModel = orderProcessFactory.CheckOrder(orderDTO); if (!string.IsNullOrEmpty(orderViewModel.ErrorMessage)) { return(orderViewModel); } var orderItems = orderRepository.CheckProducts(orderDTO.Items); var productOwnerId = orderItems.FirstOrDefault().OwnerId; // --! var storeUser = userRepository.GetUser(productOwnerId); var customerUser = userRepository.GetUserFromSignalR(Context.ConnectionId); if (storeUser == null || customerUser == null || productOwnerId == -1 || orderItems.Count == 0) { return(new ViewModels.OrderViewModel() { ErrorMessage = "Invalid Order-Data...", }); } orderViewModel.Items = orderItems; orderViewModel.CustomerUser = customerUser; orderViewModel.StoreUser = storeUser; } bool isStoreUser = false; if (Context.User.Identity.Name == orderViewModel.StoreUser.Name) { isStoreUser = true; } orderProcessFactory = Factories.OrderProcessFactory.GetOrderProcessImplementation(Enums.EnumServiceType.OrderService); var orderVMResult = orderProcessFactory.ProcessOrder(orderViewModel, isStoreUser); orderViewModel = orderVMResult; return(orderViewModel); }
public CashOrderUseCase(IOrderProcess orderProcess) { _orderProcess = orderProcess; }
static void Main(string[] args) { TestVirtual testVirtual = new TestVirtual(); Console.WriteLine(testVirtual.resultA); //using method from overrride Console.WriteLine(testVirtual.resultB); //using method from base class Console.WriteLine(testVirtual.add(1, 2)); //using method from overrride Console.WriteLine(testVirtual.substract(9, 1)); //using method from base class Console.WriteLine(); //====================================================================================== SealMethod sealMethod = new SealMethod(); Console.WriteLine(sealMethod.add(1, 1)); Console.WriteLine(sealMethod.substract(2, 2)); Console.WriteLine(sealMethod.multipy(2, 2)); Console.WriteLine(); //====================================================================================== ProtectBase protectBase = new ProtectBase(); TestProtected testProtected = new TestProtected(); // below will have complier error as "add" method can only be used inside TestProtected //Console.WriteLine(TestProtected.add(4, 5)); Console.WriteLine(); //====================================================================================== // below will have compier error - abstract can't be instantiate //AbstractBase ab = new AbstractBase(); TestAbstract testAb = new TestAbstract(); Console.WriteLine(testAb.add(3, 8)); Console.WriteLine(); //====================================================================================== Console.WriteLine("---- test order system ----"); Order order = new Order { Id = 1, FirstName = "Tan", Email = "*****@*****.**", Price = 10.50M }; OrderingFactory factory = new OrderingFactory(); IOrderProcess orderA = factory.GetOrderSupplier("A"); orderA.MakeOrder(order); Console.WriteLine(""); IOrderProcess orderB = factory.GetOrderSupplier("B"); orderB.MakeOrder(order); Console.WriteLine(""); Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++"); Console.WriteLine(""); Console.WriteLine(Multi10000(1, 1)); Console.WriteLine(); //====================================================================================== IStore store = new Document(); ICompress compress = new Document(); store.Read(); store.Write(); compress.Compress(); compress.Decompress(); using (SimpleClass simple = new SimpleClass()) { Console.WriteLine(simple.returnA()); } Console.WriteLine(); //====================================================================================== Duck d1 = new DecoyDuck(); d1.Display(); d1.PerformFly(); d1.PerformQuack(); Duck d2 = new RubberDuck(); d2.Display(); d2.PerformFly(); d2.PerformQuack(); Console.WriteLine(); //====================================================================================== /* * WeatherData weatherData = new WeatherData(); * * CurrentConditionsDisplay currDisplay = new CurrentConditionsDisplay(weatherData); * ForecastDisplay foreDisplay = new ForecastDisplay(weatherData); * * weatherData.setMeasurements(80, 65, 30.4f); */ Console.WriteLine(); //====================================================================================== WeatherTracker provider = new WeatherTracker(); CurrentConditionsDisplay currDisplay = new CurrentConditionsDisplay(provider); ForecastDisplay foreDisplay = new ForecastDisplay(provider); provider.UpdateWeather(new WeatherData(80, 65, 30.4f)); Console.WriteLine(); //====================================================================================== BeverageBase beverage = new Decaf(); Console.WriteLine(beverage.Description + " $" + beverage.cost()); BeverageBase beverage2 = new DarkRoast(); beverage2 = new Milk(beverage2); beverage2 = new Mocha(beverage2); Console.WriteLine(beverage2.Description + " $" + beverage2.cost()); Console.WriteLine(); //====================================================================================== Console.WriteLine(Singleton.Instant.getTest()); Console.WriteLine(Singleton.Instant.getTest()); Console.WriteLine(Singleton.Instant.getTest()); Console.WriteLine(); //====================================================================================== Booking booking = new Booking { BookingId = 1, SupplierCode = "GTA", FirstName = "Tan", LastName = "Tang", TotalAmount = (decimal)299.99 }; ProcessBooking bookingProcess = new ProcessBooking(booking); bookingProcess.Initial(); Console.WriteLine(" Booking State = {0}, Status = {1}", booking.State.ToString(), booking.Status); bookingProcess.PreAuthorisation(); Console.WriteLine(" Booking State = {0}, Status = {1}", booking.State.ToString(), booking.Status); bookingProcess.MakeBooking(); Console.WriteLine(" Booking State = {0}, Status = {1}", booking.State.ToString(), booking.Status); bookingProcess.MakePayment(); Console.WriteLine(" Booking State = {0}, Status = {1}", booking.State.ToString(), booking.Status); bookingProcess.FinaliseBooking(); Console.WriteLine(" Booking State = {0}, Status = {1}", booking.State.ToString(), booking.Status); Console.Read(); }
// Get book repository and orderProcess from di(Dependency Injection) public CartController(IBookRepository bookRepository, IOrderProcess orderProcess) { this.bookRepository = bookRepository; this.orderProcess = orderProcess; }