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