public async void GetAll_AllDataReturned()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var repository = new RecurringPaymentRepository(dbFactory);

            repository.Add(new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            });
            repository.Add(new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            });
            repository.Add(new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            });
            await unitOfWork.Commit();

            // Act
            var resultList = repository.GetAll().ToList();

            // Assert
            Assert.NotNull(resultList);
            Assert.Equal(3, resultList.Count);
        }
        public async void Add_AddMultipleEntries()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var repository = new RecurringPaymentRepository(dbFactory);

            // Act
            repository.Add(new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            });
            repository.Add(new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            });
            repository.Add(new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            });
            await unitOfWork.Commit();

            // Assert
            Assert.Equal(3, repository.GetAll().Count());
        }
        public async void Delete_EntryMatchedFilterDeleted()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var filterText = "Text";
            var repository = new RecurringPaymentRepository(dbFactory);
            var testEntry1 = new RecurringPaymentEntity
            {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                },
                Note = filterText
            };
            var testEntry2 = new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            };

            repository.Add(testEntry1);
            repository.Add(testEntry2);
            await unitOfWork.Commit();

            // Act
            repository.Delete(x => x.Note == filterText);
            await unitOfWork.Commit();

            // Assert
            Assert.Equal(1, repository.GetAll().Count());
        }
        public async void Update_NoNewEntryAdded()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var repository = new RecurringPaymentRepository(dbFactory);

            var testEntry = new RecurringPaymentEntity
            {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                },
                Note = "Testtext"
            };

            // Act
            repository.Add(testEntry);
            await unitOfWork.Commit();

            repository.Update(testEntry);
            await unitOfWork.Commit();

            // Assert
            Assert.Equal(1, repository.GetAll().Count());
        }
        public async void Add_AddNewEntryOnEveryCall()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var repository = new RecurringPaymentRepository(dbFactory);

            var testEntry = new RecurringPaymentEntity
            {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                },
                Note = "Testtext"
            };

            // Act
            repository.Add(testEntry);
            await unitOfWork.Commit();

            testEntry.Id = 0;
            repository.Add(testEntry);
            await unitOfWork.Commit();

            // Assert
            Assert.Equal(2, repository.GetAll().Count());
        }
        public void GetAll_NoData()
        {
            // Arrange
            var repository = new RecurringPaymentRepository(dbFactory);

            // Act
            var emptyList = repository.GetAll().ToList();

            // Assert
            Assert.NotNull(emptyList);
            Assert.False(emptyList.Any());
        }
        public void GetAll_NoData()
        {
            // Arrange
            var repository = new RecurringPaymentRepository(ambientDbContextLocator);
            List <RecurringPaymentEntity> resultList;

            // Act
            using (dbContextScopeFactory.CreateReadOnly())
            {
                resultList = repository.GetAll().ToList();
            }

            // Assert
            Assert.NotNull(resultList);
            Assert.False(resultList.Any());
        }
        public async void Delete_EntryMatchedFilterDeleted()
        {
            // Arrange
            var filterText = "Text";
            var recurringPaymentRepository = new RecurringPaymentRepository(ambientDbContextLocator);
            var accountRepository          = new AccountRepository(ambientDbContextLocator);

            AccountEntity testAccount;

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                testAccount = new AccountEntity {
                    Name = "testAccount"
                };
                accountRepository.Add(testAccount);
                await dbContextScope.SaveChangesAsync();
            }

            var testEntry1 = new RecurringPaymentEntity
            {
                ChargedAccount = testAccount,
                Note           = filterText
            };

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                var testEntry2 = new RecurringPaymentEntity {
                    ChargedAccount = testAccount
                };
                recurringPaymentRepository.Add(testEntry1);
                recurringPaymentRepository.Add(testEntry2);
                await dbContextScope.SaveChangesAsync();
            }

            // Act
            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Delete(x => x.Note == filterText);
                await dbContextScope.SaveChangesAsync();
            }

            // Assert
            using (dbContextScopeFactory.CreateReadOnly())
            {
                Assert.Equal(1, recurringPaymentRepository.GetAll().Count());
            }
        }
        public async void Add_AddNewEntryOnEveryCall()
        {
            // Arrange
            var recurringPaymentRepository = new RecurringPaymentRepository(ambientDbContextLocator);
            var accountRepository          = new AccountRepository(ambientDbContextLocator);

            AccountEntity testAccount;

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                testAccount = new AccountEntity {
                    Name = "testAccount"
                };
                accountRepository.Add(testAccount);
                await dbContextScope.SaveChangesAsync();
            }

            var testEntry = new RecurringPaymentEntity
            {
                ChargedAccount = testAccount,
                Note           = "Testtext"
            };

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Add(testEntry);
                await dbContextScope.SaveChangesAsync();
            }

            // Act
            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                testEntry.Id = 0;
                recurringPaymentRepository.Add(testEntry);
                await dbContextScope.SaveChangesAsync();
            }

            // Assert
            using (dbContextScopeFactory.CreateReadOnly())
            {
                Assert.Equal(2, recurringPaymentRepository.GetAll().Count());
            }
        }
        public async void GetAll_AllDataReturned()
        {
            // Arrange
            var recurringPaymentRepository = new RecurringPaymentRepository(ambientDbContextLocator);
            var accountRepository          = new AccountRepository(ambientDbContextLocator);

            AccountEntity testAccount;

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                testAccount = new AccountEntity {
                    Name = "testAccount"
                };
                accountRepository.Add(testAccount);
                await dbContextScope.SaveChangesAsync();
            }

            List <RecurringPaymentEntity> resultList;

            // Act
            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Add(new RecurringPaymentEntity {
                    ChargedAccount = testAccount
                });
                recurringPaymentRepository.Add(new RecurringPaymentEntity {
                    ChargedAccount = testAccount
                });
                recurringPaymentRepository.Add(new RecurringPaymentEntity {
                    ChargedAccount = testAccount
                });

                await dbContextScope.SaveChangesAsync();

                resultList = recurringPaymentRepository.GetAll().ToList();
            }

            // Assert
            Assert.NotNull(resultList);
            Assert.Equal(3, resultList.Count);
        }
        public async void Delete_EntryDeleted()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var repository = new RecurringPaymentRepository(dbFactory);
            var testEntry  = new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            };

            repository.Add(testEntry);
            await unitOfWork.Commit();

            // Act
            repository.Delete(testEntry);
            await unitOfWork.Commit();

            // Assert
            Assert.Equal(0, repository.GetAll().Count());
        }
        public async void Add_AddMultipleEntries()
        {
            // Arrange
            var recurringPaymentRepository = new RecurringPaymentRepository(ambientDbContextLocator);
            var accountRepository          = new AccountRepository(ambientDbContextLocator);

            AccountEntity account;

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                account = new AccountEntity {
                    Name = "testAccount"
                };
                accountRepository.Add(account);
                await dbContextScope.SaveChangesAsync();
            }

            // Act
            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Add(new RecurringPaymentEntity {
                    ChargedAccount = account
                });
                recurringPaymentRepository.Add(new RecurringPaymentEntity {
                    ChargedAccount = account
                });
                recurringPaymentRepository.Add(new RecurringPaymentEntity {
                    ChargedAccount = account
                });
                await dbContextScope.SaveChangesAsync();
            }

            // Assert
            using (dbContextScopeFactory.CreateReadOnly())
            {
                Assert.Equal(3, recurringPaymentRepository.GetAll().Count());
            }
        }