public void Test_InsertExactColaCoin_OutOfStock()
        {
            //Arrange
            VendingMachine vmInstance = new VendingMachine();

            vmInstance.setColaStock(0);
            IVendingMachine vm = vmInstance;

            //Act
            ICoin c = new Coin(5.670m);

            string msg = vm.InsertCoin(c);

            Assert.AreEqual("0.25", msg);

            msg = vm.InsertCoin(c);
            Assert.AreEqual("0.50", msg);


            msg = vm.InsertCoin(c);
            Assert.AreEqual("0.75", msg);


            msg = vm.InsertCoin(c);
            Assert.AreEqual("1.00", msg);

            msg = vm.Dispense(CommonUtility.productType.Cola);
            //Assert
            Assert.AreEqual("SOLD OUT", msg);
        }
        public void Test_InsertCoins_ReturnAllChange()
        {
            //Arrange
            VendingMachine  vmInstance = new VendingMachine();
            IVendingMachine vm         = vmInstance;

            //Act
            ICoin c = new Coin(5.670m);

            string msg = vm.InsertCoin(c);

            Assert.AreEqual("0.25", msg);

            msg = vm.InsertCoin(c);
            Assert.AreEqual("0.50", msg);


            msg = vm.InsertCoin(c);
            Assert.AreEqual("0.75", msg);


            msg = vm.InsertCoin(c);
            Assert.AreEqual("1.00", msg);

            msg = vm.ReturnCoins();
            //Assert
            Assert.AreEqual("Quarter Change: 4\r\nDime Change: 0\r\nNickel Change: 0\r\nCurrent Amount: 0.00\r\nINSERT COINS", msg);
        }
        public void Test_Buy1Candy_ExpectedChange15Pence()
        {
            //Arrange
            VendingMachine  vmInstance = new VendingMachine();
            IVendingMachine vm         = vmInstance;

            //Act
            ICoin c = new Coin(5.670m);

            string msg = vm.InsertCoin(c);

            Assert.AreEqual("0.25", msg);

            msg = vm.InsertCoin(c);
            Assert.AreEqual("0.50", msg);


            msg = vm.InsertCoin(c);
            Assert.AreEqual("0.75", msg);

            msg = vm.Dispense(CommonUtility.productType.Candy);
            //Assert
            Assert.AreEqual("THANK YOU", msg);

            msg = vm.ReturnCoins();
            //Assert
            Assert.AreEqual("Quarter Change: 0\r\nDime Change: 1\r\nNickel Change: 0\r\nCurrent Amount: 0.00\r\nINSERT COINS", msg);
        }
Ejemplo n.º 4
0
        public void Messages_ThankYouAfterPurchase()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());
            machine.Messages.Clear();

            machine.SelectProduct(Constants.CHIPS);

            Assert.AreEqual("THANK YOU", machine.Messages.Dequeue());
            Assert.AreEqual("EXACT CHANGE ONLY", machine.Messages.Dequeue());
        }
Ejemplo n.º 5
0
        public void GetChips_ExactChange()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());
            string productName = Constants.CHIPS;

            IProduct product = machine.SelectProduct(productName);

            Assert.AreEqual(productName, product?.Name);
            Assert.AreEqual(0, machine.CoinReturn.Count);
        }
Ejemplo n.º 6
0
        public void MakeChange()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            CreateAvailableChange(machine);
            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());

            machine.SelectProduct(Constants.CANDY);

            Assert.AreEqual(10, machine.CoinReturn.Sum(coin => coin.CentValue));
        }
Ejemplo n.º 7
0
        private void BuyChips(IVendingMachine machine, int quantity, bool discardMessages = true)
        {
            for (int i = 0; i < quantity; i++)
            {
                machine.InsertCoin(new Quarter());
                machine.InsertCoin(new Quarter());
                machine.SelectProduct(Constants.CHIPS);
            }

            if (discardMessages)
            {
                machine.Messages.Clear();
            }
        }
Ejemplo n.º 8
0
        public void Messages_SoldOut()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            BuyChips(machine, 10);
            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());
            machine.Messages.Clear();

            machine.SelectProduct(Constants.CHIPS);

            Assert.AreEqual("SOLD OUT", machine.Messages.Dequeue());
            Assert.AreEqual("$0.50", machine.Messages.Dequeue());
        }
Ejemplo n.º 9
0
        public void GetChips_InexactChange_SuperfluousCoin()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Nickel());
            string productName = Constants.CHIPS;

            IProduct product = machine.SelectProduct(productName);

            Assert.AreEqual(productName, product?.Name);
            Assert.AreEqual(1, machine.CoinReturn.Count);
            Assert.AreEqual(5, machine.CoinReturn[0].CentValue);
        }
Ejemplo n.º 10
0
        public void Messages_RequireExactChange_AfterPurchase()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            machine.InsertCoin(new Quarter());
            machine.InsertCoin(new Quarter());
            string productName = Constants.CHIPS;

            machine.Messages.Clear();
            machine.SelectProduct(productName);
            // Clear the thank you message
            machine.Messages.Dequeue();

            Assert.AreEqual("EXACT CHANGE ONLY", machine.Messages.Dequeue());
        }
        public IEnumerable <Coin> AddCoins([FromBody] int coinValue)
        {
            var coin  = new Coin(coinValue);
            var coins = _vendingMachine.InsertCoin(coin);

            return(coins);
        }
        private void DisplayCoinMenu()
        {
            Console.Clear();
            Console.WriteLine();
            Console.WriteLine("Coins Denomination Supported.");
            foreach (var coin in _CoinMenu)
            {
                Console.WriteLine($"{coin.Key} - {coin.Value}");
            }

            Console.WriteLine();
            OutputCurrentAmount();
            Console.WriteLine("Select a denomination to insert:");
            var input = Console.ReadLine();

            if (int.TryParse(input, out var denomination))
            {
                if (_CoinMenu.ContainsKey(denomination))
                {
                    _vendingMachine.InsertCoin(denomination);
                    DisplayCoinMenu();
                    return;
                }
                else
                {
                    Console.WriteLine("Invalid denomination");
                }
            }
        }
Ejemplo n.º 13
0
        public void WhenInsertCoin_WithAnyCoin_ICoinFactoryCreateShouldBeInvoked(CoinEnum coin)
        {
            IVendingMachine vendingMachine = Mocker.CreateInstance <VendingMachine>();

            vendingMachine.InsertCoin(coin);

            Mocker.Verify <ICoinFactory>(c => c.Create(coin), Times.Once);
        }
Ejemplo n.º 14
0
        public void ImperfectNickelDiameterAndWeightRecognized()
        {
            IVendingMachine machine = GetVendingMachineInstance();
            ICoin           coin    = new InputCoin(21.25f, 5.05f);

            machine.Messages.Dequeue();

            machine.InsertCoin(coin);

            Assert.AreEqual("$0.05", machine.Messages.Dequeue());
        }
Ejemplo n.º 15
0
        public void WhenInsertCoin_WithAnInvalidCoin_ICoinCollectionAddCoinShouldBeInvoked(CoinEnum coinEnum, Type coinType)
        {
            IVendingMachine vendingMachine = Mocker.CreateInstance <VendingMachine>();
            ICoin           coin           = (ICoin)Activator.CreateInstance(coinType);

            Mocker.GetMock <ICoinFactory>().Setup(c => c.Create(coinEnum)).Returns(coin);

            vendingMachine.InsertCoin(coinEnum);

            Mocker.Verify <ICoinReturn>(c => c.AddCoin(coin), Times.Once);
        }
Ejemplo n.º 16
0
        public void InsufficientFunds()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            machine.InsertCoin(new Quarter());

            machine.Messages.Clear();
            machine.SelectProduct(Constants.CHIPS);

            Assert.AreEqual("PRICE $0.50", machine.Messages.Dequeue());
            Assert.AreEqual("$0.25", machine.Messages.Dequeue());
        }
Ejemplo n.º 17
0
        private void InsertCoin()
        {
            WriteLine();
            WriteLine("Insert a coin - nickel, dime or quarter or try your luck");
            WriteLine();

            var coin = ReadLine();

            _vendingMachine.InsertCoin(coin ?? string.Empty);

            CheckDisplay();
        }
Ejemplo n.º 18
0
        private void CreateAvailableChange(IVendingMachine machine)
        {
            machine.InsertCoin(new Dime());
            machine.InsertCoin(new Dime());
            machine.InsertCoin(new Nickel());
            machine.InsertCoin(new Nickel());
            machine.InsertCoin(new Nickel());
            machine.InsertCoin(new Nickel());
            machine.InsertCoin(new Nickel());
            machine.InsertCoin(new Nickel());
            string productName = Constants.CHIPS;

            IProduct product = machine.SelectProduct(productName);
        }
Ejemplo n.º 19
0
        public void InvalidCoin()
        {
            IVendingMachine machine = GetVendingMachineInstance();
            ICoin           coin    = new InputCoin(42.42f, 0.42f);

            machine.Messages.Dequeue();

            machine.InsertCoin(coin);

            Assert.AreEqual("EXACT CHANGE ONLY", machine.Messages.Dequeue());
            Assert.AreEqual(1, machine.CoinReturn.Count);
            Assert.AreEqual(coin, machine.CoinReturn[0]);
        }
Ejemplo n.º 20
0
        private static void ProcessInsertCommand(string lowerCaseInput)
        {
            var     insertCommandData = lowerCaseInput.Split(' ');
            decimal value;

            if (insertCommandData.Length != 2 || !decimal.TryParse(insertCommandData[1], out value))
            {
                Console.WriteLine($"Parameter '{insertCommandData.Last()}' is not correct, type 'help' to see valid examples." + Environment.NewLine);
                return;
            }
            vendingMachine.InsertCoin(value);
            Console.WriteLine();
        }
        public void Test_NoCoinsNoChange_InsertMessage()
        {
            //Arrange
            VendingMachine vmInstance = new VendingMachine();

            vmInstance.replenishQuarter(0, true);
            vmInstance.replenishDime(0, true);
            vmInstance.replenishNickel(0, true);

            IVendingMachine vm = vmInstance;

            //Act
            string msg = vm.InsertCoin(new Coin(0));

            //Assert
            Assert.AreEqual("EXACT CHANGE ONLY", msg);
        }
Ejemplo n.º 22
0
        public void Messages_InsertCoin_AfterPurchase()
        {
            IVendingMachine machine = GetVendingMachineInstance();

            machine.InsertCoin(new Dime());
            machine.InsertCoin(new Dime());
            machine.InsertCoin(new Dime());
            machine.InsertCoin(new Dime());
            machine.InsertCoin(new Nickel());
            machine.InsertCoin(new Nickel());

            machine.Messages.Clear();
            machine.SelectProduct(Constants.CHIPS);

            Assert.AreEqual("THANK YOU", machine.Messages.Dequeue());
            Assert.AreEqual("INSERT COIN", machine.Messages.Dequeue());
        }
Ejemplo n.º 23
0
        public void Iterate(string input)
        {
            var coin = _parseConsoleInput.Parse(input);

            _vendingMachine.InsertCoin(coin);
        }
Ejemplo n.º 24
0
 public ActionResult InsertCoin()
 {
     vendingMachine.InsertCoin();
     return(RedirectToAction("Index"));
 }
Ejemplo n.º 25
0
 public void GivenIHaveInsertedAQuarter()
 {
     vendingMachine.InsertCoin();
 }
Ejemplo n.º 26
0
 /// <summary>
 /// <inheritdoc/>
 /// </summary>
 /// <param name="coinValue">Value of the coin inserted by the user</param>
 public void InsertCoin(int coinValue)
 {
     _vendingMachine.InsertCoin(coinValue);
 }