// Problem 5. Transactional ATM Withdrawal public static void WithdrawMoney(decimal amount, string cardPin, string cardNumber) { using (var atmEntities = new ATMEntities()) { using (var transaction = atmEntities.Database.BeginTransaction()) { var currentCard = atmEntities.CardAccounts .FirstOrDefault(c => c.CardNumber == cardNumber && c.CardPIN == cardPin); if (currentCard == null) { transaction.Rollback(); throw new ArgumentNullException("There are no Card Account in database with this Pin and card number."); } if (currentCard.CardCash < amount) { transaction.Rollback(); throw new InvalidOperationException("You dont have enought money."); } currentCard.CardCash -= amount; LogWithdrawalTransaction(cardNumber, amount); atmEntities.SaveChanges(); transaction.Commit(); Console.WriteLine("Transaction completed."); } } }
public void ShouldTryToWithdrawalAmountForWrongCardNumberAndPin() { using (var atmEntities = new ATMEntities()) { var atmAccount = atmEntities.CardAccounts.FirstOrDefault(a => a.CardNumber == newCardAccount.CardNumber); AtmDAO.WithdrawMoney(AmountBiggerThanCash, "123", "32221145"); } }
public void ShouldTryToWithdrawalAmountBiggerThanCash() { using (var atmEntities = new ATMEntities()) { var atmAccount = atmEntities.CardAccounts.FirstOrDefault(a => a.CardNumber == newCardAccount.CardNumber); AtmDAO.WithdrawMoney(AmountBiggerThanCash, newCardAccount.CardPIN, newCardAccount.CardNumber); } }
public void TestInitialize() { this.newCardNumber = new Random().Next(1, 999999999).ToString(); this.newCardAccount = new CardAccount {CardCash = 10000, CardNumber = newCardNumber, CardPIN = "4321"}; using (var atmEntities = new ATMEntities()) { atmEntities.CardAccounts.Add(newCardAccount); atmEntities.SaveChanges(); } }
// Problem 6. ATM Transactions History private static void LogWithdrawalTransaction(string cardNumber, decimal amount) { using (var atmEntities = new ATMEntities()) { atmEntities.TransactionHistories.Add(new TransactionHistory { Amount = amount, CardNumber = cardNumber, TransactionDate = DateTime.Now }); atmEntities.SaveChanges(); } }
public void ShouldWithdrawalSumFromAccountAndAddTransactionHistoryForThem() { using (var atmEntities = new ATMEntities()) { AtmDAO.WithdrawMoney(Amount, newCardAccount.CardPIN, newCardAccount.CardNumber); } using (var atmEntities = new ATMEntities()) { var modifiedCardAccount = atmEntities.CardAccounts.FirstOrDefault(c => c.CardNumber == newCardNumber); var historyForWithdrawal = atmEntities.TransactionHistories.FirstOrDefault(h => h.CardNumber == newCardAccount.CardNumber); Assert.AreEqual(modifiedCardAccount.CardCash, newCardAccount.CardCash - Amount); Assert.AreEqual(modifiedCardAccount.CardNumber, newCardAccount.CardNumber); Assert.AreEqual(modifiedCardAccount.CardPIN, newCardAccount.CardPIN); Assert.AreEqual(historyForWithdrawal.Amount, Amount); Assert.AreEqual(historyForWithdrawal.CardNumber, newCardAccount.CardNumber); } }