/// <summary>
 /// <see cref="IServiceInputValidator"/>
 /// </summary>
 public void Validate(SoapTransferData transferData)
 {
     CheckNotNull(transferData, "transferData");
     ValidateAccountNumber(transferData.SenderAccountNumber);
     ValidateAccountNumber(transferData.ReceiverAccountNumber);
     CheckNotSame(transferData.ReceiverAccountNumber, transferData.SenderAccountNumber, "Account Numbers");
     CheckNotNull(transferData.Title, "operation title");
     ValidateAmount(transferData.Amount);
 }
        public void Transfer_InvalidSenderNumber_ThrowsFaultException_WrongAccountNumber()
        {
            var transferData = new SoapTransferData()
            {
                ReceiverAccountNumber = _data.ValidReceiverAccountNumber,
                Amount = "20",
                SenderAccountNumber = _data.InvalidAccountNumber,
                Title       = "lorem ipsum",
                AccessToken = _data.ValidAccessToken
            };

            _service.Transfer(transferData);
        }
        public void Transfer_BothAccountsFromThisBank_nonExistingSender_ThrowsFaultException_AccountNumberDoesntExist()
        {
            var transferData = new SoapTransferData()
            {
                ReceiverAccountNumber = _data.ValidReceiverAccountNumber,
                Amount = "20",
                SenderAccountNumber = _data.NotExistingAccountNumber,
                Title       = "lorem ipsum",
                AccessToken = _data.ValidAccessToken
            };

            _service.Transfer(transferData);
        }
        public void Transfer_NotListedBanksReceiverNumber_ThrowsFaultException_BankNotExists()
        {
            var transferData = new SoapTransferData()
            {
                ReceiverAccountNumber = _data.NotListedBankAccountNumber,
                Amount = "20",
                SenderAccountNumber = _data.ValidSenderAccountNumber,
                Title       = "lorem ipsum",
                AccessToken = _data.ValidAccessToken
            };

            _service.Transfer(transferData);
        }
        public void Transfer_ValidAccounts_SenderHasNotEnoughMoney_ThrowsFaultException_InsufficientFunds()
        {
            var transferData = new SoapTransferData()
            {
                ReceiverAccountNumber = _data.ValidReceiverAccountNumber,
                Amount = "2000000000",
                SenderAccountNumber = _data.ValidSenderAccountNumber,
                Title       = "lorem ipsum",
                AccessToken = _data.ValidAccessToken
            };

            _service.Transfer(transferData);
        }
        public void Transfer_BothAccountsFromThisBank_ReturnsSuccess()
        {
            var transferData = new SoapTransferData()
            {
                ReceiverAccountNumber = _data.ValidReceiverAccountNumber,
                Amount = "20",
                SenderAccountNumber = _data.ValidSenderAccountNumber,
                Title       = "lorem ipsum",
                AccessToken = _data.ValidAccessToken
            };
            var response = _service.Transfer(transferData);

            Assert.AreEqual(ResponseStatus.Success, response.ResponseStatus);
        }
Exemple #7
0
        /// <summary>
        /// Transfer called by Soap service.
        /// Performs inner bank transfer when both account are from this bank or
        /// inter bank transfer when receiver is from other (listed) bank.
        /// When transfer fails - throws FaultException
        /// </summary>
        /// <param name="transferData">data needed to perform transfer</param>
        /// <returns>response status</returns>
        public PaymentResponse SoapTransfer(SoapTransferData transferData)
        {
            var            amount = DecimalParser.Parse(transferData.Amount);
            AccountNumber  receiverAccountNumber;
            IAccount       sender;
            IPublicAccount receiver;

            try
            {
                sender = GetAccount(transferData.AccessToken, transferData.SenderAccountNumber);
                receiverAccountNumber = _accountNumberFactory.GetAccountNumber(transferData.ReceiverAccountNumber);
            }
            catch (BankException exception)
            {
                //not my account, access denied, or wrong receiver account number
                throw new FaultException(exception.ResponseStatus.Message());
            }
            try
            {
                receiver = GetAccount(transferData.ReceiverAccountNumber);
            }
            catch (BankException exception)
            {
                if (exception.ResponseStatus != ResponseStatus.OtherBankAccount)
                {
                    throw new FaultException(exception.ResponseStatus.Message());
                }

                //receiver ot from this bank - INTER BANK TRANSFER
                var interTransfer = new InterBankTransfer(sender, receiverAccountNumber, amount,
                                                          transferData.Title);
                _executor.ExecuteAndSave(interTransfer, sender);
                return(PrepareResponse(interTransfer.ResponseStatus));
            }
            //sender and receiver from this bank - INNER TRANSFER

            var innerTransfer = new InnerBankTransfer(sender, receiver, amount, transferData.Title);

            _executor.ExecuteAndSave(innerTransfer, sender, receiver);
            return(PrepareResponse(innerTransfer.ResponseStatus));
        }
 /// <summary>
 /// <see cref="IBankingService"/>
 /// </summary>
 public PaymentResponse Transfer(SoapTransferData transferData)
 {
     _inputValidator.Validate(transferData);
     return(_bank.SoapTransfer(transferData));
 }