Ejemplo n.º 1
0
 /// <summary>
 /// Process the order actions
 /// </summary>
 /// <param name="cmd">The order command.</param>
 /// <param name="obj">The selected type of product.</param>
 void OrderAction(OrderCmdEvent cmd, Product obj)
 {
     if (VendingMachineState != VendingMachineState.Order)
     {
         return;
     }
     if (cmd == OrderCmdEvent.Select)
     {
         if (_productRepository.CountProduct(obj.Code) > 0)
         {
             _orderedProducts.Push(obj);
             string msg = String.Format(_vendingMessageRepository.GetMessage(MessageCode.Checkout), obj);
             _displayPanel.DisplayMessage(msg);
             _productRepository.RemoveSellFromStock(obj.Code);
             VendingMachineState = VendingMachineState.Payment;
             _orderPurchasePanel.Off();
             _coinReceiver.On();
         }
     }
     else if (cmd == OrderCmdEvent.OutOfStock)
     {
         DisplayMessageByCode(MessageCode.OutOfStock);
         _orderPurchasePanel.Off();
         VendingMachineState = VendingMachineState.OutOfStock;
     }
 }
Ejemplo n.º 2
0
        public void TestSelect()
        {
            // setup the tested class instance and dependencies with the test case initialization.
            var mockDisplayPanel = new MockDisplayPanel();
            // !!! define the simulation key pad command
            var mockReadKeypadInput = new MockReadKeypadInput()
            {
                SimInputAs = 'A'
            };
            var mockVendingMessageRepository = new MockVendingMessageRepository();
            IProductRepository product       = new ProductRepository();

            product.RegisterOrUpdateProduct(PrdA);
            product.RegisterOrUpdateProduct(PrdB);
            product.AddToStock('a', 1);
            product.AddToStock('b', 1);
            var           orderPanel = new OrderPanel(mockDisplayPanel, mockReadKeypadInput, product, mockVendingMessageRepository);
            OrderCmdEvent cmd        = OrderCmdEvent.OutOfStock;
            Product       objPrd     = null;

            // !! define the action test listener
            orderPanel.OrderAction += (c, p) =>
            {
                cmd    = c;
                objPrd = p;
                // off after getting the event
                orderPanel.Off();
            };
            bool exception = false;

            orderPanel.FailtException += ex => exception = true;

            // Test subject Action - select a product
            orderPanel.On();
            Thread.Sleep(10000);

            // verify - selected product A
            Assert.False(exception);
            Assert.Equal(OrderCmdEvent.Select, cmd);
            Assert.Equal(objPrd, PrdA);

            // verify the  message flow
            List <MessageCode> TestCatchedCodes = new List <MessageCode>
            {
                MessageCode.MakeYourOrder,
                MessageCode.SelectOrderLine,
                MessageCode.SelectOrderLine,
                MessageCode.SelectOrder,
                MessageCode.Ok
            };

            Assert.Equal((IEnumerable <MessageCode>)TestCatchedCodes, (IEnumerable <MessageCode>)mockVendingMessageRepository.CatchedCodes);
            Assert.Equal((IEnumerable <string>)mockVendingMessageRepository.ReturnList, (IEnumerable <string>)mockDisplayPanel.DisplayList);
        }
Ejemplo n.º 3
0
 public void InvokeOrderAction(OrderCmdEvent cmd, Product obj)
 {
     OrderAction?.Invoke(cmd, obj);
 }