Ejemplo n.º 1
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.º 2
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.º 3
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.º 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
        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.º 6
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.º 7
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.º 8
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.º 9
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());
        }
Ejemplo n.º 10
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.º 11
0
        private void SelectProduct()
        {
            WriteLine();
            WriteLine("(a) Cola,  $1.00");
            WriteLine("(b) Chips, $0.50");
            WriteLine("(c) Candy, $0.65");
            WriteLine("(x) Go Back");
            WriteLine();

            var selection = ReadLine();

            if (selection?.ToLowerInvariant() == "x")
            {
                return;
            }

            _vendingMachine.SelectProduct(selection ?? string.Empty);

            CheckDisplay();
        }
Ejemplo n.º 12
0
 /// <summary>
 /// <inheritdoc/>
 /// </summary>
 /// <param name="itemName">Name of the product selected by the user</param>
 public void SelectProduct(string itemName)
 {
     _vendingMachine.SelectProduct(itemName);
 }