// 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.");
                }
            }
        }
Пример #2
0
        public void ShouldTryToWithdrawalAmountForWrongCardNumberAndPin()
        {
            using (var atmEntities = new ATMEntities())
            {
                var atmAccount = atmEntities.CardAccounts.FirstOrDefault(a => a.CardNumber == newCardAccount.CardNumber);

                AtmDAO.WithdrawMoney(AmountBiggerThanCash, "123", "32221145");
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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();
            }
        }
Пример #6
0
        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);
            }
        }