public async Task GivenRepository_WhenFullCRUDFlowIsRun_ThenSucceed() { var builder = new DbContextOptionsBuilder <UsersDbContext>(); builder.UseNpgsql(ConnectionString, x => x.MigrationsHistoryTable( HistoryRepository.DefaultTableName, SchemaName)); User user; await using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext, new NulloAggregateEventsPublisher()); await dbContext.Database.MigrateAsync(); user = new User { Id = 0, UserName = "******", FullName = null }; //1. Add var result = await repository.Add(user); await repository.SaveChanges(); result.Should().NotBe(null); result.Id.Should().BeGreaterThan(0); result.UserName.Should().Be("*****@*****.**"); result.FullName.Should().BeNull(); } //2. GetById await using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext, new NulloAggregateEventsPublisher()); var recordFromDb = await repository.FindById(user.Id); recordFromDb.Should().BeEquivalentTo(user); } //3. Update await using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext, new NulloAggregateEventsPublisher()); var userToUpdate = new User { Id = user.Id, UserName = "******", FullName = "Tom Smith" }; repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext, new NulloAggregateEventsPublisher()); var result = await repository.Update(userToUpdate); await repository.SaveChanges(); result.Should().NotBe(null); result.Id.Should().Be(user.Id); result.UserName.Should().Be("*****@*****.**"); result.FullName.Should().Be("Tom Smith"); var recordFromDb = await repository.FindById(userToUpdate.Id); recordFromDb.Should().BeEquivalentTo(result); } //4. Remove await using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext, new NulloAggregateEventsPublisher()); var result = await repository.DeleteById(user.Id); await repository.SaveChanges(); result.Should().BeTrue(); var recordFromDb = await repository.FindById(user.Id); recordFromDb.Should().Be(null); } //5. Add Range await using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext, new NulloAggregateEventsPublisher()); var results = (await repository.AddAll(
public void GivenRepository_WhenFullCRUDFlowIsRun_ThenSucceed() { var builder = new DbContextOptionsBuilder <UsersDbContext>(); builder.UseNpgsql(ConnectionString, x => x.MigrationsHistoryTable( HistoryRepository.DefaultTableName, SchemaName)); User user = null; using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext); dbContext.Database.Migrate(); user = new User { Id = 0, UserName = "******", FullName = null }; //1. Add var result = repository.Add(user); repository.SaveChanges(); result.Should().NotBe(null); result.Id.Should().BeGreaterThan(0); result.UserName.Should().Be("*****@*****.**"); result.FullName.Should().BeNull(); } //2. GetById using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext); var recordFromDb = repository.FindById(user.Id); recordFromDb.Should().BeEquivalentTo(user); } //3. Update using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext); var userToUpdate = new User { Id = user.Id, UserName = "******", FullName = "Tom Smith" }; repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext); var result = repository.Update(userToUpdate); repository.SaveChanges(); result.Should().NotBe(null); result.Id.Should().Be(user.Id); result.UserName.Should().Be("*****@*****.**"); result.FullName.Should().Be("Tom Smith"); var recordFromDb = repository.FindById(userToUpdate.Id); recordFromDb.Should().BeEquivalentTo(result); } //4. Remove using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext); var result = repository.DeleteById(user.Id); repository.SaveChanges(); result.Should().BeTrue(); var recordFromDb = repository.FindById(user.Id); recordFromDb.Should().Be(null); } //5. Add Range using (var dbContext = new UsersDbContext(builder.Options)) { var repository = new EntityFrameworkRepository <UsersDbContext, User>(dbContext); var results = repository.AddAll( new User { UserName = "******" }, new User { UserName = "******" }, new User { UserName = "******" } )?.ToList(); repository.SaveChanges(); results.Should().NotBeNull(); results.Should().HaveCount(3); results[0].Id.Should().BeGreaterThan(0); results[0].UserName.Should().Be("*****@*****.**"); results[0].FullName.Should().BeNull(); results[1].Id.Should().BeGreaterThan(0); results[1].UserName.Should().Be("*****@*****.**"); results[1].FullName.Should().BeNull(); results[2].Id.Should().BeGreaterThan(0); results[2].UserName.Should().Be("*****@*****.**"); results[2].FullName.Should().BeNull(); //6. Query var queryResults = repository.Query().ToList(); queryResults.Should().Contain(x => results.Select(u => u.Id).Contains(x.Id)); queryResults = repository.Query().ToList().Where(x => x.UserName == results[1].UserName).ToList(); queryResults.Should().HaveCountGreaterOrEqualTo(1); queryResults.First(x => x.Id == results[1].Id).Should().BeEquivalentTo(results[1]); } }