public void WithdrawBalanceShouldBeEqualToAmount() { var testUser = users[0]; var result = WithdrawHelper.WithdrawFromAtm(testUser, atm, 1000); Assert.AreEqual(1000, result.Balance); }
public void WithdrawShouldPreferNotesOverCoins() { var testUser = users[0]; var result = WithdrawHelper.WithdrawFromAtm(testUser, atm, 1000); Assert.AreEqual(0, result.CoinDictionary.Count); }
public async Task <IActionResult> Create ([Bind("WithdrawId,WithdrawDate,Amount,AtmId,UserId")] WithdrawViewModel withdraw) { if (ModelState.IsValid) { var model = withdraw.ToModel(_context); bool hasError = model.AutomatedTellerMachine == null || model.User == null; try { model.CurrencyDictionary = WithdrawHelper.WithdrawFromAtm(model.User, model.AutomatedTellerMachine, withdraw.Amount, _context); } catch (InsufficentFundsException) { ModelState.AddModelError("UserId", $"User {model.User.Name} has insufficient funds (${model.User.Balance}) to withdraw ${withdraw.Amount}"); hasError = true; } catch (InsufficientChangeException) { ModelState.AddModelError("AtmId", $"ATM {model.AutomatedTellerMachine.Alias} has insufficient change to withdraw ${withdraw.Amount}"); hasError = true; } catch { throw; } if (model.AutomatedTellerMachine == null) { ModelState.AddModelError("AtmId", "ATM not found"); } if (model.User == null) { ModelState.AddModelError("UserId", "User not found"); } if (hasError) { ViewBag.Users = await GetUsers(); ViewBag.Atms = await GetAtms(); return(View(withdraw)); } model.WithdrawDate = DateTime.Now; _context.Add(model); await _context.SaveChangesAsync(); (TempData["SuccessMessage"], TempData["InfoMessages"]) = BuildWithdrawMessage(model); return(RedirectToAction("Index")); } return(View(withdraw)); }
public void WithdrawShouldRemoveBalanceFromUser() { var testUser = users[0]; var balance = testUser.Balance; WithdrawHelper.WithdrawFromAtm(testUser, atm, 1000); Assert.AreEqual(balance - 1000, testUser.Balance); }
public void NegativeWithdrawShouldYieldNothing() { var testUser = users[0]; var result = WithdrawHelper.WithdrawFromAtm(testUser, atm, -1); var coinCount = result.CoinDictionary.Count; var noteCount = result.NoteDictionary.Count; Assert.AreEqual((0, 0), (coinCount, noteCount)); }
public void WithdrawShouldYieldRightChange() { var testUser = users[0]; var result = WithdrawHelper.WithdrawFromAtm(testUser, atm, 578); var noteFiveHundredCount = result .NoteDictionary .Count(c => c.Key.Value == 500); var noteFiftyCount = result .NoteDictionary .Count(c => c.Key.Value == 50); var coinTwentyCount = result .CoinDictionary .Count(c => c.Key.Value == 20); var coinFiveCount = result .CoinDictionary .Count(c => c.Key.Value == 5); var coinTwoCount = result .CoinDictionary .Count(c => c.Key.Value == 2); var coinOneCount = result .CoinDictionary .Count(c => c.Key.Value == 1); var actual = ( noteFiveHundredCount, noteFiftyCount, coinTwentyCount, coinFiveCount, coinTwoCount, coinOneCount); var expected = (1, 1, 1, 1, 1, 1); Assert.AreEqual(expected, actual); }
public void EmptyAtmShouldNotWithdraw() { var testUser = users[0]; WithdrawHelper.WithdrawFromAtm(testUser, emptyAtm, 1); }
public void UserWithdrawShouldThrowIfAtmHasNotEnoughChange() { var testUser = users[0]; WithdrawHelper.WithdrawFromAtm(testUser, atm, 99999999); }
public void UserWithdrawWithInsufficientFundsShouldThrow() { var testUser = users[1]; WithdrawHelper.WithdrawFromAtm(testUser, atm, 3000); }