public void SelectProduct_HavingSoldOutCandy_GivenCandy_ReturnsCoins()
        {
            // Arrange
            const Products product = Products.Candy;

            SessionHelper.Inventory[product] = 0;
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Dime);
            CoinHelper.AddCoin(Denominations.Nickel);

            // Act
            var result = _sut.SelectProduct(product);

            // Assert
            Assert.AreEqual(2, SessionHelper.CurrentCoins[Denominations.Quarter]);
            Assert.AreEqual(1, SessionHelper.CurrentCoins[Denominations.Dime]);
            Assert.AreEqual(1, SessionHelper.CurrentCoins[Denominations.Nickel]);
            Assert.AreEqual(Products.Candy.Price(), SessionHelper.CurrentCoins.TotalValue());
            Assert.AreEqual(2, SessionHelper.TotalCoins[Denominations.Quarter]);
            Assert.AreEqual(1, SessionHelper.TotalCoins[Denominations.Dime]);
            Assert.AreEqual(1, SessionHelper.TotalCoins[Denominations.Nickel]);
            Assert.AreEqual(Products.Candy.Price(), SessionHelper.TotalCoins.TotalValue());
            Assert.AreEqual(decimal.Zero, SessionHelper.ReturnCoins.TotalValue());
            Assert.IsNotNull(result);
            Assert.AreEqual(MessageConstants.SoldOut, result);
        }
        public void SelectProduct_HavingMoreThanEnoughCoins_GivenCandy_ReturnsCoins()
        {
            // Arrange
            const Products product = Products.Candy;

            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Dime);
            CoinHelper.AddCoin(Denominations.Dime);
            CoinHelper.AddCoin(Denominations.Dime);
            CoinHelper.AddCoin(Denominations.Dime);
            CoinHelper.AddCoin(Denominations.Nickel);
            CoinHelper.AddCoin(Denominations.Nickel);
            CoinHelper.AddCoin(Denominations.Nickel);
            CoinHelper.AddCoin(Denominations.Nickel);

            // Act
            var result = _sut.SelectProduct(product);

            // Assert
            Assert.AreEqual(3, SessionHelper.ReturnCoins[Denominations.Quarter]);
            Assert.AreEqual(2, SessionHelper.ReturnCoins[Denominations.Dime]);
            Assert.AreEqual(.95M, SessionHelper.ReturnCoins.TotalValue());
            Assert.IsNotNull(result);
            Assert.AreEqual(MessageConstants.ThankYou, result);
        }
        public string AcceptCoins(Coin coin)
        {
            coin.Denomination = DetermineDenomination(coin);

            switch (coin.Denomination)
            {
            case Denominations.Penny:
            case Denominations.Unknown:
            {
                CoinHelper.AddReturnCoin(coin.Denomination);

                break;
            }

            case Denominations.Nickel:
            case Denominations.Dime:
            case Denominations.Quarter:
            {
                CoinHelper.AddCoin(coin.Denomination);

                break;
            }
            }

            var totalValue = SessionHelper.CurrentCoins.TotalValue();

            return(totalValue > decimal.Zero ? $"{totalValue:C2}" : MessageConstants.InsertCoin);
        }
예제 #4
0
        public override void UpdateInventory(Item item, Player player)
        {
            base.UpdateInventory(item, player);
            PbonePlayer mPlayer = player.GetModPlayer <PbonePlayer>();

            if (mPlayer.VoidPig && CoinHelper.CoinTypes.Contains(item.type))
            {
                CoinHelper.VoidPig(player.inventory, player.bank.item);
            }
        }
        public decimal GetValueOfCoinReturn()
        {
            decimal value = 0;

            foreach (var coin in _coinReturn)
            {
                value += CoinHelper.GetCoinValue(coin);
            }

            return(value);
        }
        public void InsertCoin(string coinName)
        {
            var coinValue = CoinHelper.GetCoinValue(coinName);

            if (coinValue > 0)
            {
                _insertedCoins.Add(coinName);
                CreditValue += coinValue;
                TryToDispenseProduct();
            }
            else
            {
                _coinReturn.Add(coinName);
            }
        }
        public void SelectProduct_HavingNotEnoughCoins_GivenCandy_ReturnsCandyPrice()
        {
            // Arrange
            const Products product = Products.Candy;

            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Dime);

            // Act
            var result = _sut.SelectProduct(product);

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(string.Format(MessageConstants.Price, product.Price()), result);
        }
예제 #8
0
        private static string CheckCoins(Products product)
        {
            var currentCoins = SessionHelper.CurrentCoins.TotalValue();
            var price        = product.Price();

            // Determine if no coins
            if (currentCoins == decimal.Zero)
            {
                return(MessageConstants.InsertCoin);
            }

            // Determine if less than enough coins
            if (currentCoins < price)
            {
                return(string.Format(MessageConstants.Price, product.Price()));
            }

            // Determine if exact coins
            if (currentCoins == price)
            {
                ProductHelper.UpdateInventory(product);

                return(MessageConstants.ThankYou);
            }

            var change = CoinHelper.CalculateChange(currentCoins, price);

            // Determine if exact change
            if (!CoinHelper.HasExactChange(change))
            {
                return(MessageConstants.ExactChange);
            }

            // Determine if more than enough coins
            if (currentCoins > price)
            {
                ProductHelper.UpdateInventory(product);
                CoinHelper.MakeChange(change);

                return(MessageConstants.ThankYou);
            }

            return(string.Empty);
        }
        public void SelectProduct_HavingNoExactChange_GivenCandy_ReturnsExactChangeMessage()
        {
            // Arrange
            const Products product = Products.Candy;

            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);

            // Act
            var result = _sut.SelectProduct(product);

            // Assert
            Assert.AreEqual(3, SessionHelper.CurrentCoins[Denominations.Quarter]);
            Assert.AreEqual(.75M, SessionHelper.CurrentCoins.TotalValue());
            Assert.AreEqual(3, SessionHelper.TotalCoins[Denominations.Quarter]);
            Assert.AreEqual(.75M, SessionHelper.TotalCoins.TotalValue());
            Assert.AreEqual(decimal.Zero, SessionHelper.ReturnCoins.TotalValue());
            Assert.IsNotNull(result);
            Assert.AreEqual(MessageConstants.ExactChange, result);
        }
        public void SelectProduct_HavingExactCoins_GivenCandy_UpdatesInventoryClearsCurrentCoinsAndReturnsThankYou()
        {
            // Arrange
            const Products product = Products.Candy;

            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Quarter);
            CoinHelper.AddCoin(Denominations.Dime);
            CoinHelper.AddCoin(Denominations.Nickel);

            // Act
            var result = _sut.SelectProduct(product);

            // Assert
            Assert.AreEqual(2, SessionHelper.Inventory[Products.Candy]);
            Assert.AreEqual(3, SessionHelper.Inventory[Products.Chips]);
            Assert.AreEqual(3, SessionHelper.Inventory[Products.Cola]);
            Assert.AreEqual(decimal.Zero, SessionHelper.CurrentCoins.TotalValue());
            Assert.AreEqual(.65M, SessionHelper.TotalCoins.TotalValue());
            Assert.IsNotNull(result);
            Assert.AreEqual(MessageConstants.ThankYou, result);
        }
예제 #11
0
 // Use this for initialization
 void Start()
 {
     helper = this;
 }