public async Task Throws_Bad_Request_On_Missing_FromAccount( CreateTransferCommand command, [Frozen] Mock <IRepository> repo, Account toAccount, CreateTransferHandler sut) { repo.SetupSequence(p => p.FindAsync(It.IsAny <Scalar <Account> >())) .ReturnsAsync(toAccount) .ReturnsAsync((Account)null); await Assert.ThrowsAsync <BadRequestException>(async() => { await sut.Handle(command, new CancellationToken()); }); }
public async Task Throws_Bad_Request_On_Insufficient_Funds( CreateTransferCommand command, [Frozen] Mock <IRepository> repo, Account toAccount, Account fromAccount, CreateTransferHandler sut) { fromAccount.Debit(new Funds(Currency.USD, fromAccount.Balance.Amount)); repo.SetupSequence(p => p.FindAsync(It.IsAny <Scalar <Account> >())) .ReturnsAsync(toAccount) .ReturnsAsync(fromAccount); await Assert.ThrowsAsync <BadRequestException>(async() => { await sut.Handle(command, new CancellationToken()); }); }
public async Task Succeed_On_Valid_Request( CreateTransferCommand command, [Frozen] Mock <IRepository> repo, Account toAccount, Account fromAccount, CreateTransferHandler sut) { fromAccount.Credit(new Funds(Currency.USD, command.Funds.Amount)); var initialToAccount = toAccount.Balance.Amount; var initialFromAccount = fromAccount.Balance.Amount; repo.SetupSequence(p => p.FindAsync(It.IsAny <Scalar <Account> >())) .ReturnsAsync(toAccount) .ReturnsAsync(fromAccount); var result = await sut.Handle(command, new CancellationToken()); repo.Verify(p => p.FindAsync(It.IsAny <Scalar <Account> >()), Times.Exactly(2)); repo.Verify(p => p.UnitOfWork.CommitAsync(), Times.Once()); Assert.True(result.Amount == command.Funds.Amount + initialToAccount); Assert.True(fromAccount.Balance.Amount == initialFromAccount - command.Funds.Amount); }