public async Task CreditCard_Should_BeSavedAndRestoredWithGivenLimit()
        {
            var ownerId = Guid.NewGuid();
            var owner   = new AccountOwnerBuilder()
                          .WithId(ownerId)
                          .Build();

            var expectedLimit = 100;
            var creditCardId  = Guid.NewGuid();
            var creditCard    = new CreditCardBuilder()
                                .WithId(creditCardId)
                                .WithLimit(expectedLimit)
                                .WithOwnerId(ownerId)
                                .Build();

            using (var context = new CreditCardContext())
            {
                var accountOwnerRepository = new AccountOwnerRepository(context);
                var creditCardRepository   = new CreditCardRepository(context);

                await accountOwnerRepository.Add(owner);

                await creditCardRepository.Add(creditCard);

                await context.SaveChangesAsync();

                var storedCreditCard = await creditCardRepository.Get(creditCardId);

                storedCreditCard.Should().NotBeNull();
                var storedSnapshot = storedCreditCard.GetSnapshot();
                storedSnapshot.AvaliableLimit.Should().Be(expectedLimit);
            }
        }
        public async Task CreditCardReport_Should_ShowValidData()
        {
            var ownerId   = Guid.NewGuid();
            var ownerName = $"Name for {ownerId}";
            var owner     = new AccountOwnerBuilder()
                            .WithId(ownerId)
                            .WithName(ownerName)
                            .Build();


            var expectedLimit = 512.11m;
            var creditCardId  = Guid.NewGuid();
            var creditCard    = new CreditCardBuilder()
                                .WithId(creditCardId)
                                .WithLimit(expectedLimit)
                                .WithOwnerId(ownerId)
                                .Build();

            using (var context = new CreditCardContext())
            {
                var accountOwnerRepository = new AccountOwnerRepository(context);
                var creditCardRepository   = new CreditCardRepository(context);

                await accountOwnerRepository.Add(owner);

                await creditCardRepository.Add(creditCard);

                await context.SaveChangesAsync();

                var reports = new CreditCardReports();

                var reportResult = await reports.Generate();

                var expectedEntry = reportResult.FirstOrDefault(rr => rr.Owner == ownerName);

                expectedEntry.Should().NotBeNull();
                expectedEntry.Limit.Should().Be(expectedLimit);
            }
        }