public void DispatchTransaction(BinaryReader reader, IRemoteNode remoteNode) { TransactionType type = (TransactionType)reader.ReadByte(); ITransactionProcessor processor = _transactionProcessors[type]; processor.ProcessTransaction(reader, remoteNode); }
public IEnumerable <string> ProcessTransactions(IEnumerable <string> inputs) { foreach (var input in inputs) { var transaction = ParseTransaction(input); var outputCode = _transactionProcessor.ProcessTransaction(transaction); var outputLine = $"{input} {outputCode}"; yield return(outputLine); } }
/// <summary> /// Button 'Make Transaction' click /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnMakeTransaction_Click(object sender, EventArgs e) { ITransactionAccount transactionAccount = createTransactionAccount(); //IDepositAccount depositAccount = createDepositAccount(); ILoanAccount loanAccount = createLoanAccount(); ITransactionProcessor transactionProccesor = TransactionProcessor.GetTransactionProcessor(); CurrencyAmount currencyAmount = new CurrencyAmount(); currencyAmount.Amount = Convert.ToInt32(txtTransactionAmoun.Text); currencyAmount.Currency = txtTransactionCurrency.Text; //ovde dodavam event handler-i za event-ite transactionAccount.OnBalanceChanged += new BalanceChanged(OnBalanceChangeEventHandler); loanAccount.OnBalanceChanged += new BalanceChanged(OnBalanceChangeEventHandler); bool errorOccurred = false; string errorMsg = ""; TransactionStatus status = TransactionStatus.Failed; try { status = transactionProccesor.ProcessTransaction(TransactionType.Credit, currencyAmount, transactionAccount, loanAccount); } catch (ApplicationException ae) { errorOccurred = true; errorMsg = ae.Message; } finally { if (errorOccurred) { MessageBox.Show(errorMsg); } } if (status.Equals(TransactionStatus.Completed)) { lblTransactionStatus.Text = "Transaction Completed"; } else { lblTransactionStatus.Text = "Transaction Failed"; } //populateDepositAccount(depositAccount); //populateLoanAccount(loanAccount); //populateTransactionAccount(transactionAccount); //lblNumberTransactions.Text ="Number of transactions: " + transactionProccesor.TransactionCount; DisplayLastTransactionDetails(); }
public void ProcessTransactions_ShouldProcessPastDuePendingTransactionAndUpdateBalance() { // create new cancelled transaction var pastDuePendingTransaction = new CashAccountTransaction { Amount = -100, FinalizationDateTime = DateTime.Now.AddDays(-2), StatusId = (int)TransactionStatusType.Pending }; // create account with old transaction var account = new CashAccount { Balance = 500, Transactions = new Collection <CashAccountTransaction> { pastDuePendingTransaction } }; // return account when retrieving from the repository A.CallTo(() => _repository.GetAccountWithTransactions(A <int> .Ignored)).Returns(account); // process transactions for the account _accountManager.ProcessTransactions(); // transactions should be retrieved from the repository A.CallTo(() => _repository.GetAccountWithTransactions(A <int> .Ignored)).MustHaveHappened(); // account should have been updated var newAccount = _accountManager.GetFieldValue <CashAccount>("_account"); newAccount.Should().Be(account); // ensure the transaction was processed A.CallTo(() => _transactionProcessor.ProcessTransaction(pastDuePendingTransaction)).MustHaveHappened(); // check that transactions are as expected newAccount.Transactions.Should().Contain(t => t == pastDuePendingTransaction); // check that balance was updated correctly newAccount.Balance.Should().Be(400); }
/// <summary> /// Updates the balance for the account from pending transactions /// </summary> /// <param name="transaction"></param> private decimal UpdateBalanceFromPendingTransaction(CashAccountTransaction transaction) { try { // process the transaction _transactionProcessor.ProcessTransaction(transaction); // set the status on the transaction to completed transaction.StatusId = (int)TransactionStatusType.Completed; // return the amount for the transaction return(transaction.Amount); } catch { // mark as failed transaction.StatusId = (int)TransactionStatusType.Failed; return(0); } }