コード例 #1
0
        public int PurchaseItem(VendingStock stock)
        {
            var stockItems = _vendingStockRepository.ReduceStock(stock, ReduceStock);
            var stockItem  = stockItems.Single(x => x.Item == stock);

            return(stockItem.AvailableStock);
        }
コード例 #2
0
        public int AddInventory(VendingStock stock, int addedInventory)
        {
            var stockItems = _vendingStockRepository.AddInventory(stock, addedInventory);
            var stockItem  = stockItems.Single(x => x.Item == stock);

            return(stockItem.AvailableStock);
        }
コード例 #3
0
        public IEnumerable <StockItem> ReduceStock(VendingStock item, int reduceAmount)
        {
            var stockItem = _stock.Single(x => x.Item == item);

            stockItem.AvailableStock -= reduceAmount;

            return(_stock);
        }
コード例 #4
0
        public IEnumerable <StockItem> AddInventory(VendingStock item, int addedInventory)
        {
            var stockItem = _stock.Single(x => x.Item == item);

            stockItem.AvailableStock += addedInventory;

            return(_stock);
        }
コード例 #5
0
        public void DepositChangeWillIncreaseTotalAvailableChangeByStockCost()
        {
            _stock = VendingStock.Pop;

            var actual = _changeStatus.DepositChange(_stock.Cost);

            Assert.AreEqual(_stock.Cost, actual);
        }
コード例 #6
0
        public void MakeChangeWillReturnChangeInHighestDenominatonsPossible()
        {
            _stock = VendingStock.Chips;
            var insertedAmount  = 1.25m;
            var expectedResults = new List <Coin> {
                Coin.Quarter, Coin.Quarter, Coin.Quarter
            };

            var actual = _changeStatus.MakeChange(_stock.Cost, insertedAmount);

            CollectionAssert.AreEquivalent(expectedResults, actual);
        }
コード例 #7
0
        public void MakeChangeWillReturnModulusOfInsertedValueInCorrectDenominations()
        {
            _stock = VendingStock.Candy;
            var insertedAmount  = 1.00m;
            var expectedResults = new List <Coin> {
                Coin.Quarter, Coin.Dime
            };

            var actual = _changeStatus.MakeChange(_stock.Cost, insertedAmount);

            CollectionAssert.AreEquivalent(expectedResults, actual);
        }
コード例 #8
0
 public string SelectItemForPurchase(VendingStock vendingStock, decimal tenderedAmount)
 {
     if (_stockStatus.HasAvailableItem(vendingStock))
     {
         if (_itemValidator.CanPurchase(vendingStock, tenderedAmount))
         {
             _changeStatus.DepositChange(vendingStock.Cost);
             _changeStatus.MakeChange(vendingStock.Cost, tenderedAmount);
             _stockStatus.PurchaseItem(vendingStock);
             return("THANK YOU");
         }
         return(string.Format("PRICE ${0}", vendingStock.Cost));
     }
     return("SOLD OUT");
 }
コード例 #9
0
 public bool CanPurchase(VendingStock stock, decimal amount)
 {
     return(amount >= stock.Cost);
 }
コード例 #10
0
 public StockItem(VendingStock item, int availableStock)
 {
     Item           = item;
     AvailableStock = availableStock;
 }
コード例 #11
0
 static VendingStock()
 {
     Chips = new VendingStock(0.50m);
     Candy = new VendingStock(0.65m);
     Pop   = new VendingStock(1.00m);
 }
コード例 #12
0
        public bool HasFundsAvailable(VendingStock item, decimal funds)
        {
            var stock = _vendingStockRepository.GetInventory();

            return(stock.Single(x => x.Item == item).Item.Cost <= funds);
        }
コード例 #13
0
        public bool HasAvailableItem(VendingStock item)
        {
            var stock = _vendingStockRepository.GetInventory();

            return(stock.Single(x => x.Item == item).AvailableStock >= 1);
        }