示例#1
0
        public void MakeChange()
        {
            Coin    quarter      = new Coin("quarter");
            Coin    dime         = new Coin("dime");
            Coin    nickel       = new Coin("nickel");
            decimal quarterValue = 0.25m;
            decimal dimeValue    = 0.10m;
            decimal nickelValue  = 0.05m;

            while (ValueInMachine > 0.0m)
            {
                if (ValueInMachine >= quarterValue)
                {
                    CoinReturn.Add(quarter);
                    ValueInMachine -= quarterValue;
                }
                else if (ValueInMachine >= dimeValue)
                {
                    CoinReturn.Add(dime);
                    ValueInMachine -= dimeValue;
                }
                else if (ValueInMachine >= nickelValue)
                {
                    CoinReturn.Add(nickel);
                    ValueInMachine -= nickelValue;
                }
            }
        }
示例#2
0
        public void TestAmoutAvaibleReturnsValueOfAllCoinsInTheReturnMulitpleCoins()
        {
            CoinReturn coinReturn = new CoinReturn();

            MockCoin mockCoinOne = new MockCoin()
            {
                ValueToReturn = 1.00m
            };
            MockCoin mockCoinTwo = new MockCoin()
            {
                ValueToReturn = 99.28m
            };
            MockCoin mockCoinThree = new MockCoin()
            {
                ValueToReturn = 123.123m
            };

            decimal expectedValue = mockCoinOne.ValueToReturn + mockCoinTwo.ValueToReturn + mockCoinThree.ValueToReturn;

            coinReturn.AddCoin(mockCoinOne);
            coinReturn.AddCoin(mockCoinTwo);
            coinReturn.AddCoin(mockCoinThree);

            Assert.AreEqual(expectedValue, coinReturn.AmountAvailable);
        }
        private void ButtonEventListener(object sender, EventArgs eventArgs)
        {
            decimal amountReturnedFromClear = CoinReturn.Clear();

            if (amountReturnedFromClear > 0)
            {
                DialogService.ShowMessage("You receive: " + $"{amountReturnedFromClear:C}");
            }
        }
示例#4
0
        public void TestRegisterAddsObserverToObserverList()
        {
            CoinReturn             coinReturn             = new CoinReturn();
            MockCoinReturnObserver mockCoinReturnObserver = new MockCoinReturnObserver();

            coinReturn.RegisterObserver(mockCoinReturnObserver);

            Assert.AreEqual(1, coinReturn.Observers.Count);
            Assert.AreEqual(mockCoinReturnObserver, coinReturn.Observers[0]);
        }
示例#5
0
        public void TestAddPutsCoinIntoCoinList()
        {
            CoinReturn coinReturn = new CoinReturn();
            MockCoin   coinAdded  = new MockCoin();

            coinReturn.AddCoin(coinAdded);
            Assert.AreEqual(new List <ICoin>()
            {
                coinAdded
            }, coinReturn.Coins);
        }
示例#6
0
        public void MakeChange(decimal productCost)
        {
            var coins = new List <ICoin>();

            var cost                 = productCost;
            var deposited            = DepositedCoins.TotalValue();
            var amountOwedToCustomer = deposited - cost;
            var refundRemaining      = amountOwedToCustomer;

            if ((amountOwedToCustomer % new decimal(0.25)) < amountOwedToCustomer)
            {
                var numOfCoins = (int)(amountOwedToCustomer / new decimal(0.25));
                for (var i = 0; i < numOfCoins; i++)
                {
                    coins.Add(Coin.Quarter);
                }

                refundRemaining      = refundRemaining % new decimal(0.25);
                amountOwedToCustomer = refundRemaining;
            }

            if ((amountOwedToCustomer % new decimal(0.10)) < amountOwedToCustomer)
            {
                var numOfCoins = (int)(amountOwedToCustomer / new decimal(0.10));
                for (var i = 0; i <= numOfCoins; i++)
                {
                    coins.Add(Coin.Dime);
                }

                refundRemaining      = refundRemaining % new decimal(0.10);
                amountOwedToCustomer = refundRemaining;
            }

            if ((amountOwedToCustomer % new decimal(0.05)) < amountOwedToCustomer)
            {
                var numOfCoins = (int)(amountOwedToCustomer / new decimal(0.05));
                for (var i = 0; i <= numOfCoins; i++)
                {
                    coins.Add(Coin.Nickel);
                }

                refundRemaining      = refundRemaining % new decimal(0.05);
                amountOwedToCustomer = refundRemaining;
            }

            foreach (var coin in coins)
            {
                CoinInventory.Remove(coin);
                CoinReturn.Deposit(coin.ToMetal());
            }
        }
示例#7
0
        public void TestAmoutAvaibleReturnsValueOfAllCoinsInTheReturn()
        {
            CoinReturn coinReturn = new CoinReturn();

            decimal  expectedValue = 4.00m;
            MockCoin mockCoinOne   = new MockCoin()
            {
                ValueToReturn = expectedValue
            };

            coinReturn.AddCoin(mockCoinOne);

            Assert.AreEqual(expectedValue, coinReturn.AmountAvailable);
        }
示例#8
0
        public void TestClearCallsCoinReturnUpdatedOnObservers()
        {
            CoinReturn             coinReturn = new CoinReturn();
            MockCoinReturnObserver mockCoinReturnObserverOne = new MockCoinReturnObserver();
            MockCoinReturnObserver mockCoinReturnObserverTwo = new MockCoinReturnObserver();

            coinReturn.RegisterObserver(mockCoinReturnObserverOne);
            coinReturn.RegisterObserver(mockCoinReturnObserverTwo);

            coinReturn.Clear();

            Assert.AreEqual(1, mockCoinReturnObserverOne.NumberOfTimesCoinPurseUpdatedCalled);
            Assert.AreEqual(1, mockCoinReturnObserverTwo.NumberOfTimesCoinPurseUpdatedCalled);
        }
示例#9
0
        public void TestClearReturnsValueOfAllCoins(decimal coinOneValue, decimal coinTwoValue, decimal expectedTotalValue)
        {
            CoinReturn coinReturn = new CoinReturn();

            coinReturn.AddCoin(new MockCoin()
            {
                ValueToReturn = coinOneValue
            });
            coinReturn.AddCoin(new MockCoin()
            {
                ValueToReturn = coinTwoValue
            });

            Assert.AreEqual(expectedTotalValue, coinReturn.Clear());
        }
示例#10
0
        public void TestClearEmptiesCoinList()
        {
            CoinReturn coinReturn = new CoinReturn();

            MockCoin firstCoinAdded  = new MockCoin();
            MockCoin secondCoinAdded = new MockCoin();
            MockCoin thirdCoinAdded  = new MockCoin();

            coinReturn.AddCoin(firstCoinAdded);
            coinReturn.AddCoin(secondCoinAdded);
            coinReturn.AddCoin(thirdCoinAdded);

            coinReturn.Clear();

            Assert.AreEqual(new List <ICoin>(), coinReturn.Coins);
        }
示例#11
0
 // Other methods
 public void TakeCoin(Coin insertedCoin)
 {
     if (insertedCoin.CoinType == "quarter")
     {
         ValueInMachine += 0.25m;
     }
     else if (insertedCoin.CoinType == "dime")
     {
         ValueInMachine += 0.10m;
     }
     else if (insertedCoin.CoinType == "nickel")
     {
         ValueInMachine += 0.05m;
     }
     else
     {
         CoinReturn.Add(insertedCoin);
     }
 }
示例#12
0
        public void TestAddPutsCoinIntoCoinListMultipleCoins()
        {
            CoinReturn coinReturn = new CoinReturn();

            MockCoin firstCoinAdded  = new MockCoin();
            MockCoin secondCoinAdded = new MockCoin();
            MockCoin thirdCoinAdded  = new MockCoin();

            List <ICoin> expectedCoins = new List <ICoin>()
            {
                firstCoinAdded,
                secondCoinAdded,
                thirdCoinAdded
            };

            coinReturn.AddCoin(firstCoinAdded);
            coinReturn.AddCoin(secondCoinAdded);
            coinReturn.AddCoin(thirdCoinAdded);

            Assert.AreEqual(expectedCoins, coinReturn.Coins);
        }
示例#13
0
        /// <summary>
        /// Issues change when a customer has entered more coins than are required
        /// </summary>
        /// <param name="amountToReturn">The amount to be returned</param>
        private void IssueChange(decimal amountToReturn)
        {
            if (CoinReturn == null)
            {
                CoinReturn = new List <Coin>();
            }

            var valCounter = 0m;

            foreach (var coin in CurrentTransaction)
            {
                valCounter += coin.Value;

                CoinReturn.Add(coin);

                if (amountToReturn == valCounter)
                {
                    return;
                }
            }
        }
示例#14
0
 public void InvalidCoin(IMetal metal)
 {
     CoinReturn.Deposit(metal);
     StartState();
 }
示例#15
0
        public void TestCoinReturnStartsWithEmptyCoinList()
        {
            CoinReturn coinReturn = new CoinReturn();

            Assert.AreEqual(new List <ICoin>(), coinReturn.Coins);
        }
 // simulate the return of a coin
 public void ReturnCoin(string coin)
 {
     CoinReturn.Add(coin);
 }