/// <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); }
/// <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)); }