Example #1
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);
        }
Example #2
0
        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"));
        }
Example #7
0
        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);
        }
Example #11
0
        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);
        }
Example #15
0
        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");
            }
        }
Example #16
0
 public CartController(IProductsRepository repo, IOrderProcess proc)
 {
     repository     = repo;
     orderProcessor = proc;
 }
 public OnlineOrderUseCase(IOrderProcess orderProcess, IOnlineOrderProcess orderOnlineProcess)
 {
     _orderProcess       = orderProcess;
     _orderOnlineProcess = orderOnlineProcess;
 }
Example #18
0
        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;
 }
Example #20
0
        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();
        }
Example #21
0
 // Get book repository and orderProcess from di(Dependency Injection)
 public CartController(IBookRepository bookRepository, IOrderProcess orderProcess)
 {
     this.bookRepository = bookRepository;
     this.orderProcess   = orderProcess;
 }