public void Acceptance() { var clock = new Mock <IClock>(); var mockOutputConsole = new Mock <OutputConsole>(); var statementPrinter = new StatementPrinter(mockOutputConsole.Object); var transactionLedger = new TransactionLedger(clock.Object); var atm = new ATM(statementPrinter, transactionLedger); var timeOfTransaction = new DateTime(2012, 01, 10); clock.Setup(clockMock => clockMock.getTime()).Returns(timeOfTransaction.ToUniversalTime); atm.Deposit(1000); timeOfTransaction = new DateTime(2012, 01, 13); clock.Setup(clockMock => clockMock.getTime()).Returns(timeOfTransaction.ToUniversalTime); atm.Deposit(2000); timeOfTransaction = new DateTime(2012, 01, 14); clock.Setup(clockMock => clockMock.getTime()).Returns(timeOfTransaction.ToUniversalTime); atm.Withdraw(500); atm.PrintStatement(); mockOutputConsole.Verify(console => console.WriteLine("date || credit || debit || balance")); mockOutputConsole.Verify(outputMock => outputMock.WriteLine("14/01/2012 || || 500.00 || 2500.00")); mockOutputConsole.Verify(outputMock => outputMock.WriteLine("13/01/2012 || 2000.00 || || 3000.00")); mockOutputConsole.Verify(outputMock => outputMock.WriteLine("10/01/2012 || 1000.00 || || 1000.00")); }
public void record_a_withdrawal_transaction() { var debit = new Amount(5); IAmount credit = new NullAmount(); var expectedTransaction = new Transaction(_clock.Object.getTime(), credit, debit); var transactionLedger = new TransactionLedger(_clock.Object); transactionLedger.Withdraw(debit); Assert.Contains(expectedTransaction, transactionLedger.GetTransactions()); }
public void record_a_deposit_transaction() { var credit = new Amount(5); IAmount debit = new NullAmount(); var expectedTransaction = new Transaction(_clock.Object.getTime(), credit, debit); var transactionLedger = new TransactionLedger(_clock.Object); transactionLedger.Deposit(credit); Assert.Contains(expectedTransaction, transactionLedger.GetTransactions()); }
public bool Enlist(string actorName) { bool success = false; if (TransactionLedger.ContainsKey(actorName)) { TransactionLedger[actorName] = true; success = true; Logger.LogInfo($"Transaction actor: {actorName} enlisted for transaction."); } return(success); }
public void StartDistributedUpdate() { transactionLedger = new Dictionary <string, bool>(distributedTransactionActors.Count); foreach (string actor in distributedTransactionActors.Keys) { if (!TransactionLedger.ContainsKey(actor)) { TransactionLedger.Add(actor, false); } } Logger.LogInfo("Distributed transaction started. Waiting for transaction actors to enlist..."); //TODO: start timer... }
public async Task <CreateTransactionResponse> Handle(CreateTransactionRequest request, CancellationToken cancellationToken) { var transaction = _mapperProvider.Map <CreateTransactionRequest, Transaction>(request); var budgetPlanner = await _budgetPlannerService.GetBudgetPlanner(transaction.BudgetId, cancellationToken); budgetPlanner.LastUpdated = SqlDateTime.MinValue.Value; var previousBalance = await _transactionProvider.GetBalance(transaction.BudgetId, cancellationToken, true); if (transaction.Id != default) { transaction = await _transactionService.SaveTransaction(transaction, cancellationToken); return(Response.Success <CreateTransactionResponse>(transaction)); } transaction = await _transactionService.SaveTransaction(transaction, cancellationToken, false); var transactionLedger = new TransactionLedger { Transaction = transaction, Amount = transaction.Type == Domains.Enumerations.TransactionType.Expense ? -transaction.Amount : transaction.Amount, PreviousBalance = previousBalance, NewBalance = transaction.Type == Domains.Enumerations.TransactionType.Expense ? previousBalance - transaction.Amount : previousBalance + transaction.Amount }; await _transactionLedgerService .SaveTransactionLedger(transactionLedger, true, cancellationToken); return(Response.Success <CreateTransactionResponse>(transaction)); }
public async Task <TransactionLedger> SaveTransactionLedger(TransactionLedger transactionLedger, bool saveChanges, CancellationToken cancellationToken) { return(await _transactionLedgerRepository.SaveChanges(transactionLedger, saveChanges)); }
/// <summary> /// Constructor /// </summary> public Register() { ledgerFactory = TransactionLedger.InitializeFactories(Transaction.InitializeFactories(Till.InitializeFactories(Bank.InitializeFactories()))); Layout = Layouts.US; }