public void AccountHandler_SendMoney_Succesfull()
        {
            var  accountService = new Moq.Mock <IAccountService>();
            var  accountHandler = new AccountHandler(accountService.Object);
            var  transactionId  = Guid.NewGuid();
            Guid accountId      = Guid.NewGuid();
            var  account        = new Models.Account();
            var  ammount        = new Models.Money();
            var  accountDetail  = new Models.AccountDetail()
            {
                Id      = accountId,
                Account = account,
                Balance = new Money()
                {
                    Total    = 1000,
                    Currency = "BRL"
                }
            };

            accountService
            .Setup(a => a.FindAccount(account))
            .Returns(accountDetail);

            accountHandler.SendMoney(account, ammount, transactionId);

            accountService.Verify(a => a.FindAccount(account), Moq.Times.Once);
            accountService.Verify(a => a.SendMoney(accountId, ammount, transactionId), Moq.Times.Once);
        }
        public void AccountHandler_BlockMoney_Succesfull()
        {
            var  accountService = new Moq.Mock <IAccountService>();
            var  accountHandler = new AccountHandler(accountService.Object);
            var  serviceId      = Guid.NewGuid();
            Guid accountId      = Guid.NewGuid();
            var  origin         = new Models.Account();
            var  accountDetail  = new Models.AccountDetail()
            {
                Id      = accountId,
                Account = origin,
                Balance = new Money()
                {
                    Total    = 1000,
                    Currency = "BRL"
                }
            };
            var ammount = new Models.Money();

            accountService
            .Setup(a => a.FindAccount(origin))
            .Returns(accountDetail);

            accountService
            .Setup(a => a.BlockAmmount(accountId, ammount))
            .Returns(serviceId);

            var transactionId = accountHandler.BlockAmmount(origin, ammount);

            Assert.Equal(serviceId, transactionId);

            accountService.Verify(a => a.FindAccount(origin), Moq.Times.Once);
            accountService.Verify(a => a.BlockAmmount(accountId, ammount), Moq.Times.Once);
        }
Example #3
0
        public void AccountService_SendMoney_Succesfull()
        {
            var  accountDataBase   = new Moq.Mock <IDataBase <Models.AccountDetail> >();
            var  operationDataBase = new Moq.Mock <IDataBase <Operation> >();
            var  AccountService    = new AccountService(accountDataBase.Object, operationDataBase.Object);
            var  transactionId     = Guid.NewGuid();
            Guid accountId         = Guid.NewGuid();
            var  origin            = new Models.Account();
            var  accountDetail     = new Models.AccountDetail()
            {
                Id      = accountId,
                Account = origin,
                Balance = new Money()
                {
                    Total    = 1000,
                    Currency = "BRL"
                }
            };
            var ammount = new Models.Money()
            {
                Total    = 1000,
                Currency = "BRL"
            };

            accountDataBase
            .Setup(a => a.GetById(accountId))
            .Returns(accountDetail);

            operationDataBase
            .Setup(a => a.Create(Moq.It.Is <Operation>(o =>
                                                       o.AccountId == accountId &&
                                                       o.Ammount.Currency == ammount.Currency &&
                                                       o.Ammount.Total == ammount.Total &&
                                                       o.OperationType == OperationType.In &&
                                                       o.Status == OperationStatus.Waiting &&
                                                       o.TransactionId == transactionId
                                                       )))
            .Returns <Operation>((operation) =>
            {
                operation.Id = Guid.NewGuid();
                return(operation);
            });

            AccountService.SendMoney(accountId, ammount, transactionId);

            operationDataBase.Verify(a => a.Create(Moq.It.Is <Operation>(o =>
                                                                         o.AccountId == accountId &&
                                                                         o.Ammount.Currency == ammount.Currency &&
                                                                         o.Ammount.Total == ammount.Total &&
                                                                         o.OperationType == OperationType.In &&
                                                                         o.Status == OperationStatus.Waiting &&
                                                                         o.TransactionId == transactionId
                                                                         )), Moq.Times.Once);
        }
Example #4
0
        public void AccountService_RevertInOperation_OperationAlreadyCommitedException()
        {
            var  accountDataBase   = new Moq.Mock <IDataBase <Models.AccountDetail> >();
            var  operationDataBase = new Moq.Mock <IDataBase <Operation> >();
            var  AccountService    = new AccountService(accountDataBase.Object, operationDataBase.Object);
            var  transactionId     = Guid.NewGuid();
            Guid accountId         = Guid.NewGuid();
            var  origin            = new Models.Account();
            var  accountDetail     = new Models.AccountDetail()
            {
                Id      = accountId,
                Account = origin,
                Balance = new Money()
                {
                    Total    = 1000,
                    Currency = "BRL"
                }
            };
            var ammount = new Models.Money()
            {
                Total    = 1000,
                Currency = "BRL"
            };

            accountDataBase
            .Setup(a => a.GetById(accountId))
            .Returns(accountDetail);

            operationDataBase
            .Setup(o => o.GetById(transactionId))
            .Returns <Guid>((id) =>
            {
                return(new Operation()
                {
                    Id = id,
                    AccountId = accountId,
                    Ammount = new Models.Money()
                    {
                        Currency = ammount.Currency,
                        Total = ammount.Total
                    },
                    OperationType = OperationType.In,
                    Status = OperationStatus.Confirmed,
                    TransactionId = id
                });
            });

            Assert.Throws <OperationAlreadyCommitedException>(() => AccountService.RevertOperation(transactionId));

            operationDataBase.Verify(o => o.GetById(transactionId), Moq.Times.Once);
            accountDataBase.Verify(a => a.GetById(Moq.It.IsAny <Guid>()), Moq.Times.Never);
            accountDataBase.Verify(a => a.Update(Moq.It.IsAny <AccountDetail>()), Moq.Times.Never);
            operationDataBase.Verify(a => a.Update(Moq.It.IsAny <Operation>()), Moq.Times.Never);
        }
Example #5
0
        public void AccountService_BlockMoney_AccountNotFoundException()
        {
            var  accountDataBase   = new Moq.Mock <IDataBase <Models.AccountDetail> >();
            var  operationDataBase = new Moq.Mock <IDataBase <Operation> >();
            var  AccountService    = new AccountService(accountDataBase.Object, operationDataBase.Object);
            var  serviceId         = Guid.NewGuid();
            Guid accountId         = Guid.NewGuid();
            var  origin            = new Models.Account();
            var  accountDetail     = new Models.AccountDetail()
            {
                Id      = accountId,
                Account = origin,
                Balance = new Money()
                {
                    Total    = 1000,
                    Currency = "BRL"
                }
            };
            var ammount = new Models.Money()
            {
                Total    = 1000.01,
                Currency = "BRL"
            };

            accountDataBase
            .Setup(a => a.GetById(accountId))
            .Returns(accountDetail);

            operationDataBase
            .Setup(a => a.Create(Moq.It.Is <Operation>(o =>
                                                       o.AccountId == accountId &&
                                                       o.Ammount.Currency == ammount.Currency &&
                                                       o.Ammount.Total == ammount.Total &&
                                                       o.OperationType == OperationType.Out &&
                                                       o.Status == OperationStatus.Waiting &&
                                                       o.TransactionId == Guid.Empty
                                                       )))
            .Returns <Operation>((operation) =>
            {
                operation.Id = serviceId;
                return(operation);
            });

            Assert.Throws <AccountNotFoundException>(() => AccountService.BlockAmmount(Guid.Empty, ammount));


            accountDataBase.Verify(a => a.GetById(Guid.Empty), Moq.Times.Once);
            accountDataBase.Verify(a => a.Update(Moq.It.IsAny <AccountDetail>()), Moq.Times.Never);
            operationDataBase.Verify(a => a.Create(Moq.It.IsAny <Operation>()), Moq.Times.Never);
        }
Example #6
0
        public void AccountService_RevertInOperation_Succesfull()
        {
            var  accountDataBase   = new Moq.Mock <IDataBase <Models.AccountDetail> >();
            var  operationDataBase = new Moq.Mock <IDataBase <Operation> >();
            var  AccountService    = new AccountService(accountDataBase.Object, operationDataBase.Object);
            var  transactionId     = Guid.NewGuid();
            Guid accountId         = Guid.NewGuid();
            var  origin            = new Models.Account();
            var  accountDetail     = new Models.AccountDetail()
            {
                Id      = accountId,
                Account = origin,
                Balance = new Money()
                {
                    Total    = 1000,
                    Currency = "BRL"
                }
            };
            var ammount = new Models.Money()
            {
                Total    = 1000,
                Currency = "BRL"
            };

            accountDataBase
            .Setup(a => a.GetById(accountId))
            .Returns(accountDetail);

            operationDataBase
            .Setup(a => a.Create(Moq.It.Is <Operation>(o =>
                                                       o.AccountId == accountId &&
                                                       o.Ammount.Currency == ammount.Currency &&
                                                       o.Ammount.Total == ammount.Total &&
                                                       o.OperationType == OperationType.In &&
                                                       o.Status == OperationStatus.Waiting &&
                                                       o.TransactionId == Guid.Empty
                                                       )))
            .Returns <Operation>((operation) =>
            {
                operation.Id = transactionId;
                return(operation);
            });


            operationDataBase
            .Setup(o => o.GetById(transactionId))
            .Returns <Guid>((id) =>
            {
                return(new Operation()
                {
                    Id = id,
                    AccountId = accountId,
                    Ammount = new Models.Money()
                    {
                        Currency = ammount.Currency,
                        Total = ammount.Total
                    },
                    OperationType = OperationType.In,
                    Status = OperationStatus.Waiting,
                    TransactionId = id
                });
            });

            var processedOperation = AccountService.RevertOperation(transactionId);

            Assert.Equal(transactionId, processedOperation.TransactionId);
            Assert.Equal(OperationStatus.Reverted, processedOperation.Status);

            operationDataBase.Verify(o => o.GetById(transactionId), Moq.Times.Once);
            accountDataBase.Verify(a => a.GetById(Moq.It.IsAny <Guid>()), Moq.Times.Never);
            accountDataBase.Verify(a => a.Update(Moq.It.IsAny <AccountDetail>()), Moq.Times.Never);
            operationDataBase.Verify(a => a.Update(Moq.It.Is <Operation>(o => o.Status == OperationStatus.Reverted)), Moq.Times.Once);
        }