Exemplo n.º 1
0
        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"));
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 7
0
 public async Task <TransactionLedger> SaveTransactionLedger(TransactionLedger transactionLedger, bool saveChanges, CancellationToken cancellationToken)
 {
     return(await _transactionLedgerRepository.SaveChanges(transactionLedger, saveChanges));
 }
Exemplo n.º 8
0
 /// <summary>
 /// Constructor
 /// </summary>
 public Register()
 {
     ledgerFactory = TransactionLedger.InitializeFactories(Transaction.InitializeFactories(Till.InitializeFactories(Bank.InitializeFactories())));
     Layout        = Layouts.US;
 }