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