public void RequestSoda_ShouldReturnSodaWithChange() { string userId = "user2468"; decimal amount = 1.00M; SodaModel actualSoda; int coinCount; SodaModel requestedSoda = new SodaModel { Name = "Pepsi", SlotOccupied = "A1" }; (SodaModel soda, List <CoinModel> coins, string message)result; sodaMachineLogic.MoneyInserted(userId, amount); sodaMachineLogic.MoneyInserted(userId, amount); result = sodaMachineLogic.RequestSoda(requestedSoda); actualSoda = result.soda; coinCount = result.coins.Count; System.Console.WriteLine(result.coins.Count.ToString() + coinCount); Assert.Multiple(() => { Assert.AreEqual(requestedSoda.Name, actualSoda.Name); Assert.AreEqual(requestedSoda.SlotOccupied, actualSoda.SlotOccupied); Assert.That(coinCount, Is.GreaterThan(0)); }); }
public void RequestSoda_ShouldReturnSodaWithAlternativeChange() { MockDataAccess da = new MockDataAccess(); SodaMachineLogic logic = new SodaMachineLogic(da); string user = "******"; SodaModel expcetedSoda = new SodaModel { Name = "Coke", SlotOccupied = "1" }; var initialState = da.MachineInfo; da.UserCredit[user] = 1M; da.CoinInventory.RemoveAll(x => x.Amount == 0.25M); var results = logic.RequestSoda(expcetedSoda, user); Assert.Equal(expcetedSoda.Name, results.soda.Name); Assert.Equal(expcetedSoda.SlotOccupied, results.soda.SlotOccupied); Assert.Equal(0, da.UserCredit[user]); Assert.Equal(initialState.cashOnHand + 1M, da.MachineInfo.cashOnHand); Assert.Equal(initialState.totalIncome + 1M, da.MachineInfo.totalIncome); Assert.True(string.IsNullOrWhiteSpace(results.errorMessage)); // Dime + Dime + Nickle = Quarter Assert.True(results.change.Count() == 3); }
public void RequestSoda_ShouldSayNotEnoughChange() { MockDataAccess da = new MockDataAccess(); SodaMachineLogic logic = new SodaMachineLogic(da); string user = "******"; SodaModel expcetedSoda = new SodaModel { Name = "Coke", SlotOccupied = "1" }; var initialState = da.MachineInfo; da.UserCredit[user] = 1.75M; da.CoinInventory.Clear(); var results = logic.RequestSoda(expcetedSoda, user); Assert.Null(results.soda); Assert.Equal(1.75M, da.UserCredit[user]); Assert.Equal(initialState.cashOnHand, da.MachineInfo.cashOnHand); Assert.Equal(initialState.totalIncome, da.MachineInfo.totalIncome); Assert.False(string.IsNullOrWhiteSpace(results.errorMessage)); Assert.True(results.change.Count() == 0); }
public void RequestSoda_ShouldReturnSodaWithNoChange() { MockDataAccess da = new MockDataAccess(); SodaMachineLogic logic = new SodaMachineLogic(da); string user = "******"; SodaModel expcetedSoda = new SodaModel { Name = "Coke", SlotOccupied = "1" }; var initialState = da.MachineInfo; da.UserCredit[user] = 0.75M; var results = logic.RequestSoda(expcetedSoda, user); Assert.Equal(expcetedSoda.Name, results.soda.Name); Assert.Equal(expcetedSoda.SlotOccupied, results.soda.SlotOccupied); Assert.Equal(0, da.UserCredit[user]); Assert.Equal(initialState.cashOnHand + 0.75M, da.MachineInfo.cashOnHand); Assert.Equal(initialState.totalIncome + 0.75M, da.MachineInfo.totalIncome); Assert.True(string.IsNullOrWhiteSpace(results.errorMessage)); Assert.True(results.change.Count() == 0); }
public void RequestSoda_ShouldSayOutOfStock() { MockDataAccess da = new MockDataAccess(); SodaMachineLogic logic = new SodaMachineLogic(da); string user = "******"; SodaModel expectedSoda = new SodaModel { Name = "Fanta", SlotOccupied = "4" }; var initialState = da.MachineInfo; da.UserCredit[user] = 0.75M; var results = logic.RequestSoda(expectedSoda, user); Assert.Null(results.soda); Assert.Equal(0.75M, da.UserCredit[user]); Assert.Equal(initialState.cashOnHand, da.MachineInfo.cashOnHand); Assert.Equal(initialState.totalIncome, da.MachineInfo.totalIncome); Assert.False(string.IsNullOrWhiteSpace(results.errorMessage)); Assert.True(results.change.Count() == 0); }
static void Main() { ConfigureServices(); SodaMachineLogic sodaMachineLogic = ActivatorUtilities.CreateInstance <SodaMachineLogic>(ServiceProvider); Menu menu = new Menu(); SodaMachineDisplay sodaMachineDisplay = new SodaMachineDisplay(); string userId = "user12"; while (true) { menu.PrintMenu(); string userChoice = Console.ReadLine(); Console.WriteLine(); switch (userChoice) { case "1": sodaMachineDisplay.PrintTypesOfSoda(sodaMachineLogic.ListTypesOfSoda()); break; case "2": sodaMachineDisplay.PrintSodaInStock(sodaMachineLogic.GetSodaInventory()); break; case "3": sodaMachineDisplay.PrintSodaPrice(sodaMachineLogic.GetSodaPrice()); break; case "4": sodaMachineDisplay.PrintInsertMoneyChoice(sodaMachineLogic.AcceptedCoinValues); string userMoneyInput = Console.ReadLine(); if (decimal.TryParse(userMoneyInput, out decimal moneyResult)) { decimal moneyInserted = sodaMachineLogic.MoneyInserted(userId, moneyResult); if (moneyInserted != 0) { sodaMachineDisplay.PrintAmountInserted(moneyInserted); } } else { Console.WriteLine("Invalid currency"); } break; case "5": sodaMachineDisplay.PrintAmountInserted(sodaMachineLogic.GetMoneyInsertedTotal(userId)); break; case "6": List <SodaModel> availableSodas = sodaMachineLogic.ListTypesOfSoda(); sodaMachineDisplay.PrintSodaToBuyChoice(availableSodas); string userSodaInput = Console.ReadLine(); if (int.TryParse(userSodaInput, out int sodaResult)) { if (sodaResult >= 0 && sodaResult < availableSodas.Count) { SodaModel sodaInput = availableSodas[sodaResult]; var(soda, coins, message) = sodaMachineLogic.RequestSoda(sodaInput); if (string.IsNullOrEmpty(soda.Name)) { Console.WriteLine(message); } else { if (coins.Count > 0) { decimal change = 0; foreach (CoinModel coin in coins) { change += coin.Amount; } Console.WriteLine($"returned { change }"); } sodaMachineDisplay.PrintSuccessMessage(soda); } } else { Console.WriteLine("Invalid soda choice"); } } else { Console.WriteLine("Invalid soda choice"); } break; case "7": decimal refund = sodaMachineLogic.IssueFullRefund(userId); sodaMachineDisplay.PrintRefundAmount(refund); break; default: Console.WriteLine("Invalid Choice"); break; } } }