Exemple #1
0
        public async Task OnlyDebitOnce(HttpClient client, Account account)
        {
            // Arrange
            var command = new DebitAccount
            {
                AccountId = account.Id,
                Version   = account.Version,
                Amount    = -25
            };

            // Act
            var tasks = Enumerable
                        .Range(0, 10)
                        .Select(_ => Task.Run(() => client.PostAsJsonAsync("/debit", command)))
                        .ToArray();

            await Task.WhenAll(tasks);

            var responses = tasks.Select(task => task.Result).ToArray();

            // Assert
            responses
            .Where(message => message.StatusCode is HttpStatusCode.OK)
            .Should()
            .HaveCount(1);

            responses
            .Where(message => message.StatusCode is HttpStatusCode.Conflict)
            .Should()
            .HaveCount(9);
        }
        public void Show()
        {
            var accountHolder = new AccountHolder
            {
                FullName = "Ileana Scândură"
            };

            var account = new DebitAccount
            {
                AccountHolder = accountHolder,
                Iban          = "RO29RZBR2617696727494934"
            };

            accountHolder.DebitAccounts.Add(account);
            dataRepository.Insert(accountHolder);

            account.Deposit(100);
            unitOfWork.Commit();

            accountHolder = dataRepository.Query <AccountHolder>()
                            .Single(ah => ah.Id == accountHolder.Id);

            System.Console.WriteLine("Debit accounts of {0}:", accountHolder.FullName);
            foreach (var debitAccount in accountHolder.DebitAccounts)
            {
                System.Console.WriteLine("IBAN: {0}, Amount: {1}", debitAccount.Iban, debitAccount.Amount);
            }
        }
Exemple #3
0
        public async Task <DebitAccount> InsertDebitAccount(Authentication authentication, Account account, Client client)
        {
            authentication.Password = _passwordService.Hash(authentication.Password);
            using (IDbContextTransaction transaction = _context.Database.BeginTransaction())
            {
                _context.Authentications.Add(authentication);
                await _context.SaveChangesAsync();

                client.IdAuthentication = authentication.Id;
                _context.Clients.Add(client);
                await _context.SaveChangesAsync();

                account.IdClient = client.Id;
                _context.Accounts.Add(account);
                await _context.SaveChangesAsync();

                var debitAccount = new DebitAccount
                {
                    IdAccount = account.Id
                };
                _context.DebitAccounts.Add(debitAccount);
                await _context.SaveChangesAsync();

                transaction.Commit();

                return(debitAccount);
            }
        }
        public async Task DecreaseBalance(
            HttpClient client, Account account, IAccountRepository repository)
        {
            // Arrange
            try
            {
                await repository.Create(account);

                var command = new DebitAccount
                {
                    AccountId = account.Id,
                    Version   = account.Version,
                    Amount    = -25
                };

                // Act
                var response = await client.PostAsJsonAsync("/debit", command);

                // Assert
                response.StatusCode.Should().Be(HttpStatusCode.OK);
                var result = await response.Content.ReadAsAsync <Contracts.Queries.Account>();

                result.Balance.Should().Be(25);
            }
            finally
            {
                await repository.Delete(account.Id);
            }
        }
Exemple #5
0
 public void Setup()
 {
     bank          = new Bank("Tinkoff Bank");
     client1       = Client.Builder("Fredi", "Kats").SetAddress("Лесной пр-кт, д. 9").GetClient();
     debitAccount1 = new DebitAccount(client1, 10000, 2);
     bank.AddClient(client1);
     bank.AddAccountToClient(client1, debitAccount1);
 }
Exemple #6
0
 public void Setup()
 {
     _bank         = new Bank("Tinkoff Bank");
     _client       = Client.Builder("Fredi", "Kats").SetAddress("Лесной пр-кт, д. 9").SetPassport("1111223344").GetClient();
     _debitAccount = new DebitAccount(_client, 10000, 2);
     _bank.AddClient(_client);
     _bank.AddAccountToClient(_client, _debitAccount);
 }
Exemple #7
0
        public void AccountTest(long dollars, long cents)
        {
            var DebitAccount = new DebitAccount(SomeCustomer, "A01", new Money(),
                                                new Money(dollars, cents));

            Assert.IsTrue(DebitAccount.hasSufficientBalance(new Money(dollars, cents)));
            Assert.IsFalse(DebitAccount.hasSufficientBalance(new Money(dollars, cents + 1)));
        }
Exemple #8
0
        public IAccount CreateAccount(Guid bankId, Guid clientId, Bank bank, decimal money = 0)
        {
            var account = new DebitAccount();

            account.BankId   = bankId;
            account.ClientId = clientId;
            account.Money    = money;
            account.Interest = new Interest(Convert.ToDecimal(bank.Interest / 365.0));
            account.AccId    = Guid.NewGuid();

            return(account);
        }
Exemple #9
0
 public void Setup()
 {
     _bank          = new Bank("Tinkoff Bank");
     _client1       = Client.Builder("Fredi", "Kats").SetAddress("Ћесной пр-кт, д. 9").GetClient();
     _client2       = Client.Builder("Vlad", "Kazanskiy").SetAddress("¬¤земский переулок, 5-7").SetPassport("1234567890").GetClient();
     _debitAccount1 = new DebitAccount(_client1, 10000, 2);
     _debitAccount2 = new DebitAccount(_client2, 13000, 2);
     _bank.AddClient(_client1);
     _bank.AddClient(_client2);
     _bank.AddAccountToClient(_client1, _debitAccount1);
     _bank.AddAccountToClient(_client2, _debitAccount2);
 }
Exemple #10
0
 public void Setup()
 {
     _bank           = new Bank("Tinkoff Bank");
     _client         = Client.Builder("Fredi", "Kats").SetAddress("Лесной пр-кт, д. 9").SetPassport("1234567890").GetClient();
     _debitAccount   = new DebitAccount(_client, 10000, 2);
     _depositAccount = new DepositAccount(_client, 5000, TimeSpan.FromSeconds(5));
     _creditAccount  = new CreditAccount(_client, 2000, 4000, 2);
     _bank.AddClient(_client);
     _bank.AddAccountToClient(_client, _debitAccount);
     _bank.AddAccountToClient(_client, _depositAccount);
     _bank.AddAccountToClient(_client, _creditAccount);
 }
        private void execute(OpenDebitAccount operation)
        {
            var newAccount = new DebitAccount(
                operation.customer,
                operation.bank.generateAccountNumber(),
                operation.Money ?? new Money(),
                operation.startingDebit ?? new Money()
                );

            operation.bank.addAccount(newAccount);
            newAccount.OtherOperations.Add(operation);
        }
Exemple #12
0
        public void Test3()
        {
            var client1 = new Client("Cheburashcka", "Cheb", "box", "111");

            var bank     = new Bank(3.65, 10, 50000, TimeSpan.FromMinutes(1));
            var creator1 = new DebitAccountCreator();

            bank.OpenBankAccount(client1, creator1, 10000);
            DebitAccount account = (DebitAccount)client1.BankAccountList[0];

            account.AddPercents();

            Assert.AreEqual(1.0, account.PercentCash);
        }
Exemple #13
0
        static void Main(string[] args)
        {
            var debitCalculator = new DebitAccountWithdrawalFeeCalculator();
            WithdrawlAndDepositAccount debitAccount = new DebitAccount();

            Atm.DepositMoneyTo(debitAccount, 100);
            Atm.WithdrawMoneyFrom(debitAccount, 50, debitCalculator);

            var creditCalculator = new CreditAccountWithdrawalFeeCalculator();
            WithdrawlAndDepositAccount creditAccount = new CreditAccount();

            Atm.DepositMoneyTo(creditAccount, 100);
            Atm.WithdrawMoneyFrom(creditAccount, 150, new DummyCalculator());

            TestWithdrawal(new DebitAccount());
        }
Exemple #14
0
        private void DoDebitAccountEvent(DebitAccount detail)
        {
            using (var db = new BillingwareDataContext())
            {
                var account = db.Accounts.FirstOrDefault(a => a.AccountNumber == detail.Request.AccountNumber);

                if (account == null)
                {
                    return;
                }

                account.Balance -= detail.Request.Amount;

                db.Entry(account).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
Exemple #15
0
        static void TestWithdrawalFromDebitAccount()
        {
            // Arrange
            var Atm        = new AutomaticTellerMachine();
            var account    = new DebitAccount();
            var prevAmount = account.Amount;

            // Act
            Atm.DepositMoneyTo(account, 50);
            Atm.WithdrawMoneyFrom(account, 50, new DummyCalculator());

            // Assert
            if (account.Amount == prevAmount)
            {
                System.Console.WriteLine("Test passed.");
            }
        }
Exemple #16
0
        static void Main(string[] args)
        {
            IAutomaticTellerMachine atm = new AutomaticTellerMachine();
            var debitCalculator         = new DebitAccountWithdrawalFeeCalculator();
            IWithdrawalAndDepositAccount debitAccount = new DebitAccount();

            atm.DepositMoneyTo(debitAccount, 100);
            atm.WithdrawMoneyFrom(debitAccount, 50, debitCalculator);

            var creditCalculator = new CreditAccountWithdrawalFeeCalculator();
            IWithdrawalAndDepositAccount creditAccount = new CreditAccount();

            atm.DepositMoneyTo(creditAccount, 100);
            atm.WithdrawMoneyFrom(creditAccount, 150, new DummyCalculator());

            TestWithdrawalFromDebitAccount();
        }
Exemple #17
0
        public async Task ConflictIfCommandIsSentTwice(HttpClient client, Account account)
        {
            // Arrange
            var command = new DebitAccount
            {
                AccountId = account.Id,
                Version   = account.Version,
                Amount    = -25
            };

            // Act
            await client.PostAsJsonAsync("/debit", command);

            var response = await client.PostAsJsonAsync("/debit", command);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Conflict);
        }
        public async Task DecreaseBalance()
        {
            // Arrange
            var command = new DebitAccount
            {
                AccountId = account.Id,
                Version   = account.Version,
                Amount    = -25
            };

            // Act
            var response = await client.PostAsJsonAsync("/debit", command);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var result = await response.Content.ReadAsAsync <Contracts.Queries.Account>();

            result.Balance.Should().Be(25);
        }
Exemple #19
0
        public IEnumerable <IAccount> ImportData(string cultureName)
        {
            IEnumerable <DataRecord> data = null;
            var stream = new StreamReader(this.fileName);

            using (var reader = new CsvHelper.CsvReader(stream, new CultureInfo(cultureName)))
            {
                data = reader.GetRecords <DataRecord>().ToList();
            }
            RunOnXboxOnly($"In {nameof(ImportData)}.");
            var result = new List <IAccount>();

            foreach (var item in data)
            {
                var accHolder = new AccountHolder(item.IdNo, item.FirstName, item.LastName);
                var account   = new DebitAccount(item.Iban, item.Balance, accHolder);
                result.Add(account);
            }
            return(result);
        }
        public override void SendMoney(double amount, long targetaccountNumber)
        {
            DebitAccount debitAccount = Debit;

            base.SendMoney(amount, targetaccountNumber);
            double debit = amount + (amount * TaxRatio);

            if ((balance - debit) >= 0)
            {
                debitAccount(debit);
                //balance -= (amount + (amount * TaxRatio));
                Transaction transaction = new Transaction(accountNumber, targetaccountNumber, amount);
                transaction.direction = "OutGoing";
                AddTransaction(transaction);
                Console.WriteLine("eyyyyyy B" + balance);
            }
            else
            {
                Console.WriteLine("leeeeee");
                throw new Exception("you cant balance < amount ");
            }
        }
        public void Show()
        {
            var accountHolder = new Customer
            {
                FirstName = "Ileana",
                LastName  = "Scândură",
                IdNo      = "091203923018",
                Id        = Guid.NewGuid()
            };

            var debitAccount = new DebitAccount
            {
                AccountHolderId = accountHolder.Id,
                Iban            = "RO29RZBR2617696727494944"
            };

            var savingsAccount = new SavingsAccount
            {
                AccountHolderId = accountHolder.Id,
                Iban            = "RO29RZBR2617696727494946"
            };

            accountHolder.DebitAccounts.Add(debitAccount);
            accountHolder.SavingsAccounts.Add(savingsAccount);

            dataRepository.Insert(accountHolder);

            debitAccount.Deposit(100);
            unitOfWork.Commit();

            System.Console.WriteLine("Debit accounts of {0}:", accountHolder.FullName);
            foreach (var da in accountHolder.DebitAccounts)
            {
                System.Console.WriteLine("IBAN: {0}, Amount: {1}", da.Iban, da.Amount);
            }
        }
 public static string chargeCurrentAccount(this DebitAccount currentAccount)
 {
     // Bussiness Logic
     return(currentAccount.FormatTransaction());
 }
        public async Task <IActionResult> CreditAccount(Guid bankAccountId, [FromBody] DebitAccount debitCommand)
        {
            await this.debitHandler.Handle(debitCommand);

            return(NoContent());
        }
Exemple #24
0
 public static string chargeInvestmentAccount(this DebitAccount investmentAccount)
 {
     // Bussiness Logic
     return(investmentAccount.FormatTransaction());
 }
 public IActionResult Add(DebitAccount account)
 {
     debitAccountRepository.Add(account);
     return(RedirectToAction("List"));
 }
 public IActionResult Edit(DebitAccount account)
 {
     debitAccountRepository.Update(account);
     return(RedirectToAction("List"));
 }
 public static string chargeSavingsAccount(this DebitAccount savingsAccount)
 {
     // Bussiness logic
     return(savingsAccount.FormatTransaction());
 }