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 Update_EntryUpdated()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var repository = new RecurringPaymentRepository(dbFactory);

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

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

            testEntry.Note = newValue;
            repository.Update(testEntry);
            await unitOfWork.Commit();

            // Assert
            var loadedEntry = await repository.GetById(testEntry.Id);

            Assert.Equal(newValue, loadedEntry.Note);
        }
        public async void Update_IdUnchanged()
        {
            // 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();

            var idBeforeUpdate = testEntry.Id;

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

            // Assert
            Assert.Equal(idBeforeUpdate, testEntry.Id);
        }
        public void Save_WithRecurringPayment_FkSet()
        {
            var paymentRepository =
                new PaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                          new MvxWpfFileStore(FILE_ROOT)));

            var recurringPaymentRepository =
                new RecurringPaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                                   new MvxWpfFileStore(FILE_ROOT)));

            var fixture = new Fixture();

            var recurringPayment = fixture.Create <RecurringPaymentViewModel>();

            recurringPaymentRepository.Save(recurringPayment);
            recurringPayment.Id.ShouldBeGreaterThan(0);

            var testPayment = new Fixture().Create <PaymentViewModel>();

            testPayment.Id = 0;
            testPayment.RecurringPayment = recurringPayment;

            paymentRepository.Save(testPayment);
            paymentRepository.ReloadCache();
            paymentRepository.FindById(testPayment.Id).RecurringPaymentId.ShouldBe(recurringPayment.Id);
        }
        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 SaveAndUpdate_WithRecurringPayment_NoDuplicates()
        {
            var paymentRepository =
                new PaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                          new MvxWpfFileStore(FILE_ROOT)));

            var recurringPaymentRepository =
                new RecurringPaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                                   new MvxWpfFileStore(FILE_ROOT)));

            var recurringPayment = new Fixture().Create <RecurringPaymentViewModel>();

            recurringPayment.Id = 0;

            recurringPaymentRepository.Save(recurringPayment);
            paymentRepository.ReloadCache();

            var testPayment = new Fixture().Create <PaymentViewModel>();

            testPayment.Id = 0;

            testPayment.RecurringPayment = recurringPayment;

            paymentRepository.Save(testPayment);
            paymentRepository.Save(testPayment);
            var selected = paymentRepository.FindById(testPayment.Id);

            recurringPaymentRepository.GetList(x => x.Note == testPayment.RecurringPayment.Note).Count().ShouldBe(1);
        }
Example #7
0
        public async void GetMany_MatchedDataReturned()
        {
            // Arrange
            var factory    = new DbFactory();
            var unitOfWork = new UnitOfWork(factory);

            var repository = new RecurringPaymentRepository(factory);
            var filterText = "Text";

            repository.Add(new RecurringPaymentEntity
            {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                },
                Note = filterText
            });
            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.GetMany(x => x.Note == filterText).ToList();

            // Assert
            Assert.NotNull(resultList);
            Assert.Equal(1, resultList.Count);
        }
Example #8
0
        public async void GetMany_NothingMatched()
        {
            // Arrange
            var factory    = new DbFactory();
            var unitOfWork = new UnitOfWork(factory);

            var repository = new RecurringPaymentRepository(factory);

            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.GetMany(x => x.Note == "text").ToList();

            // Assert
            Assert.NotNull(resultList);
            Assert.False(resultList.Any());
        }
        public async void Delete_RelatedPaymentSetNull()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

            var recurringPaymentRepository = new RecurringPaymentRepository(dbFactory);
            var paymentRepository          = new PaymentRepository(dbFactory);

            var recurringPaymentEntity = new RecurringPaymentEntity {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                }
            };
            var payment = new PaymentEntity
            {
                ChargedAccount = new AccountEntity {
                    Name = "testAccount"
                },
                RecurringPayment = recurringPaymentEntity
            };

            paymentRepository.Add(payment);
            await unitOfWork.Commit();

            // Act
            recurringPaymentRepository.Delete(recurringPaymentEntity);
            await unitOfWork.Commit();

            // Assert
            Assert.Null(payment.RecurringPayment);
            Assert.Null(paymentRepository.GetById(payment.Id).Result.RecurringPayment);
        }
        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 Add_IdSet()
        {
            // 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"
            };

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

            // Assert
            Assert.NotNull(testEntry.Id);
            Assert.NotEqual(0, testEntry.Id);
        }
        public async void Delete_EntryNotFound()
        {
            // 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
            };

            // Act / Assert
            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Delete(testEntry);
                await Assert.ThrowsAsync <DbUpdateConcurrencyException>(async() => await dbContextScope.SaveChangesAsync());
            }
        }
        public async void Get_NothingMatched()
        {
            // 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 result = await repository.Get(x => x.Note == "text");

            // Assert
            Assert.Null(result);
        }
        public async void Get_MatchedDataReturned()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

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

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

            // Act
            var result = await repository.Get(x => x.Note == filterText);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(testEntry.Id, result.Id);
        }
Example #15
0
        public void Save_ExistingEntryUpdated()
        {
            var recPaymentRepository =
                new RecurringPaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                                   new MvxWpfFileStore(FILE_ROOT)));
            var testRecurringPayment = new Fixture().Create <RecurringPaymentViewModel>();

            testRecurringPayment.Id = 0;

            try
            {
                recPaymentRepository.Save(testRecurringPayment);
                recPaymentRepository.FindById(testRecurringPayment.Id).ShouldNotBeNull();

                const string updatedNote = "FOOOOOOOOOO";
                testRecurringPayment.Note = updatedNote;

                recPaymentRepository.Save(testRecurringPayment);
                recPaymentRepository.FindById(testRecurringPayment.Id).Note.ShouldBe(updatedNote);
            }
            finally
            {
                recPaymentRepository.Delete(testRecurringPayment);
            }
        }
        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());
        }
Example #17
0
        public async void Add_AddedAndRead()
        {
            // Arrange
            var factory    = new DbFactory();
            var unitOfWork = new UnitOfWork(factory);

            var repository = new RecurringPaymentRepository(factory);

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

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

            // Assert
            var loadedEntry = await repository.GetById(testEntry.Id);

            Assert.Equal(testEntry.Note, loadedEntry.Note);
        }
        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 void GetAll_NoData()
        {
            // Arrange
            var repository = new RecurringPaymentRepository(dbFactory);

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

            // Assert
            Assert.NotNull(emptyList);
            Assert.False(emptyList.Any());
        }
        public async void GetMany_MatchedDataReturned()
        {
            // 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 filterText = "Text";

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Add(new RecurringPaymentEntity
                {
                    ChargedAccount = testAccount,
                    Note           = filterText
                });
                await dbContextScope.SaveChangesAsync();
            }
            List <RecurringPaymentEntity> resultList;

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

                await dbContextScope.SaveChangesAsync();

                resultList = recurringPaymentRepository.GetMany(x => x.Note == filterText).ToList();
            }

            // Assert
            Assert.NotNull(resultList);
            Assert.Equal(1, resultList.Count);
        }
Example #21
0
        public void Delete_PaymentDeleted()
        {
            var recurringPaymentRepository =
                new RecurringPaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                                   new MvxWpfFileStore(FILE_ROOT)));
            var testRecurringPayment = new Fixture().Create <RecurringPaymentViewModel>();

            testRecurringPayment.Id = 0;

            recurringPaymentRepository.Save(testRecurringPayment);
            recurringPaymentRepository.FindById(testRecurringPayment.Id).ShouldNotBeNull();

            recurringPaymentRepository.Delete(testRecurringPayment);
            recurringPaymentRepository.FindById(testRecurringPayment.Id).ShouldBeNull();
        }
        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_RelatedPaymentSetNull()
        {
            // Arrange
            var recurringPaymentRepository = new RecurringPaymentRepository(ambientDbContextLocator);
            var paymentRepository          = new PaymentRepository(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 recurringPaymentEntity = new RecurringPaymentEntity {
                ChargedAccount = testAccount
            };
            var payment = new PaymentEntity
            {
                ChargedAccount   = testAccount,
                RecurringPayment = recurringPaymentEntity
            };

            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                paymentRepository.Add(payment);
                await dbContextScope.SaveChangesAsync();
            }

            // Act
            using (var dbContextScope = dbContextScopeFactory.Create())
            {
                recurringPaymentRepository.Delete(recurringPaymentEntity);
                await dbContextScope.SaveChangesAsync();
            }

            // Assert
            using (dbContextScopeFactory.CreateReadOnly())
            {
                Assert.Null(payment.RecurringPayment);
                Assert.Null(paymentRepository.GetById(payment.Id).Result.RecurringPayment);
            }
        }
        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 Update_EntryUpdated()
        {
            // 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 newValue  = "newText";
            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.Note = newValue;
                recurringPaymentRepository.Update(testEntry);
                await dbContextScope.SaveChangesAsync();
            }

            // Assert
            using (dbContextScopeFactory.CreateReadOnly())
            {
                var loadedEntry = await recurringPaymentRepository.GetById(testEntry.Id);

                Assert.Equal(newValue, loadedEntry.Note);
            }
        }
        public async void Add_WithoutAccount()
        {
            // Arrange
            var factory    = new DbFactory();
            var unitOfWork = new UnitOfWork(factory);

            var repository = new RecurringPaymentRepository(factory);

            var testEntry = new RecurringPaymentEntity()
            {
                Note = "Testtext"
            };

            // Act / Assert
            repository.Add(testEntry);
            await Assert.ThrowsAsync <DbUpdateException>(async() => await unitOfWork.Commit());
        }
Example #27
0
        public async void Save_WithRecurringPayment_GetRecurringPaymentFromHelper()
        {
            // Arrange
            var paymentRepository          = new PaymentRepository(ambientDbContextLocator);
            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 PaymentViewModel(new Payment
            {
                Data =
                {
                    ChargedAccount = testAccount,
                    Date           = DateTime.Now,
                    IsRecurring    = true,
                    Note           = "Testtext"
                }
            });

            testEntry.RecurringPayment = new RecurringPaymentViewModel(
                RecurringPaymentHelper.GetRecurringFromPayment(testEntry.Payment,
                                                               true,
                                                               PaymentRecurrence.Bimonthly,
                                                               DateTime.Now));

            var paymentService = new PaymentService(dbContextScopeFactory, paymentRepository, recurringPaymentRepository, accountRepository);

            // Act
            await paymentService.SavePayment(testEntry.Payment);

            var payment = await paymentService.GetById(testEntry.Payment.Data.Id);

            // Assert
            Assert.NotNull(payment);
        }
        public async void Delete_EntryNotFound()
        {
            // Arrange
            var unitOfWork = new UnitOfWork(dbFactory);

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

            // Act
            repository.Delete(testEntry);

            // Assert
            await Assert.ThrowsAsync <DbUpdateConcurrencyException>(async() => await unitOfWork.Commit());
        }
Example #29
0
        public void Save_IdSet()
        {
            var recurringPaymentRepository =
                new RecurringPaymentRepository(new DatabaseManager(new WindowsSqliteConnectionFactory(),
                                                                   new MvxWpfFileStore(FILE_ROOT)));
            var testRecurringPayment = new Fixture().Create <RecurringPaymentViewModel>();

            testRecurringPayment.Id = 0;

            try
            {
                recurringPaymentRepository.Save(testRecurringPayment);
                testRecurringPayment.Id.ShouldBeGreaterThan(0);
            }
            finally
            {
                recurringPaymentRepository.Delete(testRecurringPayment);
            }
        }
        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());
            }
        }