public async Task Deposit_ValidDeposit_Credited()
        {
            // Arrange
            IDateTime time    = new MockDateTime();
            var       context = FakeContext.Get();

            // Act
            var sut = new CreateAccountDepositCommandHandler(context, time);
            await sut.Handle(new CreateAccountDepositCommand()
            {
                AccountId = 1, Amount = 500m
            }, CancellationToken.None);

            // Assert
            context.Accounts.Single(a => a.AccountId == 1).Balance.ShouldBe(1000m);
        }
        public async Task Deposit_NegativeAmount_ThrowsException()
        {
            // Arrange
            IDateTime time    = new MockDateTime();
            var       context = FakeContext.Get();

            // Arrange
            var sut = new CreateAccountDepositCommandHandler(context, time);

            // Assert
            await Assert.ThrowsAsync <NegativeAmountException>
                (() => sut.Handle(new CreateAccountDepositCommand()
            {
                AccountId = 1, Amount = -500m
            }, CancellationToken.None));

            context.Accounts.Single(a => a.AccountId == 1).Balance.ShouldBe(500m);
        }
        public async Task Deposit_Transaction_Created()
        {
            // Arrange
            IDateTime time    = new MockDateTime();
            var       context = FakeContext.Get();

            // Act
            var sut = new CreateAccountDepositCommandHandler(context, time);
            await sut.Handle(new CreateAccountDepositCommand()
            {
                AccountId = 1, Amount = 500m
            }, CancellationToken.None);

            // Assert
            var transaction = context.Transactions.Single(t => t.AccountId == 1);

            transaction.AccountId.ShouldBe(1);
            transaction.Amount.ShouldBe(500m);
            transaction.Balance.ShouldBe(1000m);
            transaction.Type.ShouldBe(TransactionType.Credit);
            transaction.Operation.ShouldBe(Operation.Credit);
        }