/// <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; } }
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); }
public void InvokeOrderAction(OrderCmdEvent cmd, Product obj) { OrderAction?.Invoke(cmd, obj); }