public void PerformTransferCreateActivities()
        {
            //Arrange
            var customer = GetCustomer();

            var source = BankAccountFactory.CreateBankAccount(
                customer,
                new BankAccountNumber("1111", "2222", "3333333333", "01"));

            source.DepositMoney(1000, "initial load");

            var target = BankAccountFactory.CreateBankAccount(
                customer,
                new BankAccountNumber("1111", "2222", "12312321322", "01"));

            //Act

            var activities = source.BankAccountActivity.Count;

            var bankTransferService = new BankTransferService();

            bankTransferService.PerformTransfer(50, source, target);

            //Assert
            Assert.IsNotNull(source.BankAccountActivity);
            Assert.AreEqual(++activities, source.BankAccountActivity.Count);
        }
Example #2
0
        public UserDTO AddBankAccount(UserDTO userDTO)
        {
            if (userDTO != null)
            {
                //check if exists the customer for this bank account
                var associatedCustomer = _customerRepository.Get(bankAccountDTO.CustomerId);

                if (associatedCustomer != null) // if the customer exist
                {
                    //Create a new bank account  number
                    var accountNumber = CalculateNewBankAccountNumber();

                    //Create account from factory
                    var account = BankAccountFactory.CreateBankAccount(associatedCustomer, accountNumber);

                    //save bank account
                    SaveBankAccount(account);

                    //return dto
                    var adapter = TypeAdapterFactory.CreateAdapter();
                    return(adapter.Adapt <BankAccount, BankAccountDTO>(account));
                }
                else //the customer for this bank account not exist, cannot create a new bank account
                {
                    LoggerFactory.CreateLog().LogWarning(Messages.warning_CannotCreateBankAccountForNonExistingCustomer);
                    return(null);
                }
            }
            else // if bank account is null or customer identifier  is empty, cannot create a new bank account
            {
                LoggerFactory.CreateLog().LogWarning(Messages.warning_CannotAddNullBankAccountOrInvalidCustomer);
                return(null);
            }
        }
Example #3
0
        public void DoSomething()
        {
            var accountFactory = new BankAccountFactory();
            var storageFactory = new BankAccountStorageFactory();
            var bankService    = new BankAccountService(storageFactory);

            //AddAccountsToService(bankService, accountFactory);
            Console.WriteLine(bankService);
        }
        public void OpenAccount(AccountHolder holder, BankAccountFactory factory)
        {
            ValidateOnNull(holder, nameof(holder));
            ValidateOnNull(factory, nameof(factory));

            BankAccount account = factory.Create(holder, this.IdGenerator);

            holder.AddAccount(account);
            this.Repository.Save(account);
        }
Example #5
0
        public void PerformTransferThrowExceptionIfTargetIsLockedAccount()
        {
            //Arrange
            var customer = GetCustomer();

            var source = BankAccountFactory.CreateBankAccount(customer, new BankAccountNumber("1111", "2222", "3333333333", "01"));

            source.DepositMoney(1000, "initial load");

            var target = BankAccountFactory.CreateBankAccount(customer, new BankAccountNumber("1111", "2222", "12312321322", "01"));

            target.Lock();

            //Act
            var       bankTransferService = new BankTransferService();
            Exception ex = Assert.Throws <InvalidOperationException>(() => bankTransferService.PerformTransfer(10, source, target));

            Assert.IsType <InvalidOperationException>(ex);
        }
        public void PerformTransferThrowExceptionIfSourceCantWithdrawedWithExceedAmoung()
        {
            //Arrange
            var customer = GetCustomer();

            var source = BankAccountFactory.CreateBankAccount(customer, new BankAccountNumber("1111", "2222", "3333333333", "01"));

            source.DepositMoney(1000, "initial load");

            var target = BankAccountFactory.CreateBankAccount(customer, new BankAccountNumber("1111", "2222", "12312321322", "01"));


            //Act
            var bankTransferService = new BankTransferService();

            Exception ex = Assert.Throws <InvalidOperationException>(() => bankTransferService.PerformTransfer(2000, source, target));

            Assert.IsType(typeof(InvalidOperationException), ex);
        }
        public void BankAccountRepositoryRemoveItemDeleteIt()
        {
            //Arrange
            var unitOfWork            = new MainBcUnitOfWork();
            var customerRepository    = new CustomerRepository(unitOfWork);
            var bankAccountRepository = new BankAccountRepository(unitOfWork);

            var customer = customerRepository.Get(new Guid("43A38AC8-EAA9-4DF0-981F-2685882C7C45"));

            var bankAccountNumber = new BankAccountNumber("4444", "5555", "3333333333", "02");

            var newBankAccount = BankAccountFactory.CreateBankAccount(customer, bankAccountNumber);

            bankAccountRepository.Add(newBankAccount);
            unitOfWork.Commit();

            //Act
            bankAccountRepository.Remove(newBankAccount);
            unitOfWork.Commit();
        }
        public BankAccountRepository()
        {
            Accounts = new List <BankAccount>();

            RepositoryFileName = Settings.Default.BinaryRepositoryFileName;

            if (!File.Exists(RepositoryFileName))
            {
                return;
            }

            Stream stream = File.OpenRead(RepositoryFileName);

            using (var reader = new BinaryReader(stream))
            {
                int count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    string            accountNumber  = reader.ReadString();
                    string            ownerFirstName = reader.ReadString();
                    string            ownerLastName  = reader.ReadString();
                    decimal           balance        = reader.ReadDecimal();
                    decimal           bonusPoints    = reader.ReadDecimal();
                    BankAccountStatus status         = (BankAccountStatus)reader.ReadInt32();

                    BankAccountType type = (BankAccountType)reader.ReadInt32();

                    var owner = new AccountOwner()
                    {
                        FirstName = ownerFirstName, LastName = ownerLastName
                    };

                    Accounts.Add(InitializeFields(BankAccountFactory.Create(type, accountNumber), owner, balance, bonusPoints));
                }
            }
        }