public async Task UpdateField_WithoutProperties_ShouldReturnException() { // Arrange var testEntity = new TestEntity { Id = Guid.NewGuid(), Name = "Yoda", Number = 1 }; DbContextOptions <TestDbContext> options = new DbContextOptionsBuilder <TestDbContext>() .UseInMemoryDatabase(databaseName: "InMemory_TestDb") .Options; var dbContext = new TestDbContext(options); var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); dbContext.Add(testEntity); await dbContext.SaveChangesAsync(); testEntity.Name = "Mace Windu"; // Act Func <Task> result = async() => await repository.UpdateFieldsAsync(testEntity, null); // Assert result.Should().Throw <NullReferenceException>(); }
private ReadWriteRepository CreatePersistenceRepository(string key) { var persistenceRepository = new ReadWriteRepository("read-write"); persistenceRepository.RepositoryKey = key; return(persistenceRepository); }
public async Task UpdateAsync_ExistingEntity_ShouldUpdateEntity() { // Arrange var testEntity = new TestEntity { Id = Guid.NewGuid(), Name = "Luke Skywalker", Number = 1 }; DbContextOptions <TestDbContext> options = new DbContextOptionsBuilder <TestDbContext>() .UseInMemoryDatabase(databaseName: "InMemory_TestDb") .Options; var dbContext = new TestDbContext(options); var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); dbContext.Add(testEntity); await dbContext.SaveChangesAsync(); testEntity.Name = "Han Solo"; testEntity.Number = 2; // Act await repository.UpdateAsync(testEntity); TestEntity verifyEntity = await repository.GetByIdAsync(testEntity.Id); // Assert verifyEntity.Name.Should().Be("Han Solo"); verifyEntity.Number.Should().Be(2); }
public void IsDeleting() { var obj = Test.Create(); obj.Update("Test_Is_Write", 11000011); var objId = obj.Id; var writeRepo = new ReadWriteRepository(GetDbContext()); writeRepo.Create <Test, Guid>(obj); //THIS IS NOT DONE IN PRODUCTION writeRepo.Commit(); var readRepo = new ReadOnlyRepository(GetDbContext()); var testObj = readRepo.GetById <Test, Guid>(objId); Assert.AreEqual(obj.Name, testObj.Name); Assert.AreEqual(obj.Value, testObj.Value); writeRepo.Delete <Test, Guid>(obj); writeRepo.Commit(); var table = readRepo.Table <Test, Guid>().Where(o => o.Id.Equals(obj.Id)).ToList(); Assert.AreEqual(table.Count, 0); }
public async Task UpdateFieldsAsync_WithMultipleChangedEntities_ShouldOnlyUpdateSpecifiedEntity() { // Arrange var testEntity1 = new TestEntity { Id = Guid.NewGuid(), Name = "Count Dooku", Number = 1 }; var testEntity2 = new TestEntity { Id = Guid.NewGuid(), Name = "Kit Fisto", Number = 2 }; DbContextOptions <TestDbContext> options = new DbContextOptionsBuilder <TestDbContext>() .UseInMemoryDatabase(databaseName: "InMemory_TestDb") .Options; using (var dbContext = new TestDbContext(options)) { dbContext.Add(testEntity1); dbContext.Add(testEntity2); await dbContext.SaveChangesAsync(); } // Act using (var dbContext = new TestDbContext(options)) { var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); testEntity1 = await repository.GetByIdAsync(testEntity1.Id); testEntity1.Name = "Darth Vader"; testEntity1.Number = 45; testEntity2.Name = "Sheev Palpatine"; await repository.UpdateFieldsAsync(testEntity1, te => te.Name); } // Assert using (var dbContext = new TestDbContext(options)) { var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); TestEntity updatedTestEntity1 = await repository.GetByIdAsync(testEntity1.Id); TestEntity updatedTestEntity2 = await repository.GetByIdAsync(testEntity2.Id); updatedTestEntity1.Name.Should().Be("Darth Vader"); updatedTestEntity1.Number.Should().Be(1); updatedTestEntity2.Name.Should().Be("Kit Fisto"); } }
public async Task DeleteByIdAsync_UnknownEntity_ShouldThrowException() { // Arrange TestEntity[] entities = _fixture.CreateMany <TestEntity>(2).ToArray(); var dbContextMock = new DbContextMock <TestDbContext>(_options); dbContextMock.CreateDbSetMock(x => x.TestEntities, (x, _) => (x.Id), entities); var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContextMock.Object); // Act Func <Task> deleteEntity = async() => await repository.DeleteByIdAsync(Guid.NewGuid()); // Assert FluentAssertions.Specialized.ExceptionAssertions <NullReferenceException> result = await deleteEntity.Should().ThrowAsync <NullReferenceException>(); }
public async Task AddEntity_ShouldAddEntity() { // Arrange TestEntity entity = _fixture.Create <TestEntity>(); var dbContextMock = new DbContextMock <TestDbContext>(_options); dbContextMock.CreateDbSetMock(x => x.TestEntities, (x, _) => (x.Id)); var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContextMock.Object); // Act TestEntity result = await repository.AddAsync(entity); // Assert result.Id.Should().Be(entity.Id); result.Name.Should().Be(entity.Name); }
public void IsWritingUpdate() { var writeRepo = new ReadWriteRepository(GetDbContext()); var obj = writeRepo.Table <Test, Guid>().First(); var testId = obj.Id; var valueTest = obj.Value + 1; obj.Update(obj.Name, valueTest); //THIS IS NOT DONE IN PRODUCTION writeRepo.Commit(); var readRepo = new ReadOnlyRepository(GetDbContext()); var testObj = readRepo.GetById <Test, Guid>(testId); Assert.AreEqual(valueTest, testObj.Value); }
public async Task UpdateFieldsAsync_WithProperties_ShouldOnlyUpdateSpecifiedEntityProperties() { // Arrange var testEntity = new TestEntity { Id = Guid.NewGuid(), Name = "Anakin Skywalker", Number = 1 }; DbContextOptions <TestDbContext> options = new DbContextOptionsBuilder <TestDbContext>() .UseInMemoryDatabase(databaseName: "InMemory_TestDb") .Options; using (var dbContext = new TestDbContext(options)) { dbContext.Add(testEntity); await dbContext.SaveChangesAsync(); } testEntity.Name = "Obi-Wan Kenobi"; testEntity.Number = 2; // Act using (var dbContext = new TestDbContext(options)) { var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); await repository.UpdateFieldsAsync(testEntity, te => te.Name); } // Assert using (var dbContext = new TestDbContext(options)) { var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); TestEntity updatedTestEntity = await repository.GetByIdAsync(testEntity.Id); updatedTestEntity.Name.Should().Be("Obi-Wan Kenobi"); updatedTestEntity.Number.Should().Be(1); } }
public async Task DeleteByIdAsync_KnownEntity_ShouldDeleteEntity() { // Arrange TestEntity[] entities = _fixture.CreateMany <TestEntity>(2).ToArray(); var dbContextMock = new DbContextMock <TestDbContext>(_options); dbContextMock.CreateDbSetMock(x => x.TestEntities, (x, _) => (x.Id), entities); var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContextMock.Object); // Act await repository.DeleteByIdAsync(entities[0].Id); await repository.CommitAsync(); TestEntity[] getAll = await repository.GetAllAsync(); // Assert getAll.SingleOrDefault(x => x.Id == entities[0].Id).Should().BeNull(); getAll.Should().HaveCount(1); }
public async Task DeleteAsync_UnknownEntity_ShouldNotThrowException() { // Arrange TestEntity[] entities = _fixture.CreateMany <TestEntity>(2).ToArray(); var dbContextMock = new DbContextMock <TestDbContext>(_options); dbContextMock.CreateDbSetMock(x => x.TestEntities, (x, _) => (x.Id), entities); var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContextMock.Object); // Act await repository.DeleteAsync(_fixture.Create <TestEntity>()); await repository.CommitAsync(); TestEntity[] getAll = await repository.GetAllAsync(); // Assert getAll.Should().ContainEquivalentOf(entities[0]); getAll.Should().HaveCount(2); }
public async Task UpdateFieldsAsync_WithProperties_ShouldUpdateEntityProperties() { // Arrange var testEntity = new TestEntity { Id = Guid.NewGuid(), Name = "Chewbacca", Number = 1 }; DbContextOptions <TestDbContext> options = new DbContextOptionsBuilder <TestDbContext>() .UseInMemoryDatabase(databaseName: "InMemory_TestDb") .Options; using (var dbContext = new TestDbContext(options)) { dbContext.Add(testEntity); await dbContext.SaveChangesAsync(); } TestEntity updatedTestEntity = null; testEntity.Name = "R2-D2"; testEntity.Number = 2; // Act using (var dbContext = new TestDbContext(options)) { var repository = new ReadWriteRepository <TestEntity, Guid>(() => dbContext); await repository.UpdateFieldsAsync(testEntity, te => te.Name, te => te.Number); // Assert updatedTestEntity = await repository.GetByIdAsync(testEntity.Id); } // Assert updatedTestEntity.Name.Should().Be("R2-D2"); updatedTestEntity.Number.Should().Be(2); }
public void IsWritingAdd() { var obj = Test.Create(); obj.Update("Test_Is_Write", 11000011); var objId = obj.Id; var writeRepo = new ReadWriteRepository(GetDbContext()); writeRepo.Create <Test, Guid>(obj); //THIS IS NOT DONE IN PRODUCTION writeRepo.Commit(); var readRepo = new ReadOnlyRepository(GetDbContext()); var testObj = readRepo.GetById <Test, Guid>(objId); Assert.AreEqual(obj.Name, testObj.Name); Assert.AreEqual(obj.Value, testObj.Value); }
internal static void InitializeDatabase(IApplicationBuilder app, IConfiguration configuration) { using (var serviceScope = app.ApplicationServices.GetService <IServiceScopeFactory>().CreateScope()) { serviceScope.ServiceProvider.GetRequiredService <PersistedGrantDbContext>().Database.Migrate(); var identityContext = serviceScope.ServiceProvider.GetRequiredService <ApplicationIdentityDbContext>(); identityContext.Database.Migrate(); if (!identityContext.Users.Any()) { var adminUser = new IdentityUser() { Id = Guid.NewGuid().ToString(), Email = "*****@*****.**", UserName = "******", NormalizedUserName = "******", EmailConfirmed = true }; var writeRepo = new ReadWriteRepository(GetDbContext(configuration.GetConnectionString("ApplicationDatabase"))); if (!writeRepo.Table <CoreUser, Guid>().Any()) { var adminUserCore = CoreUser.Create(Guid.Parse(adminUser.Id)); adminUserCore.Update(new CoreUserDto() { Access = AccessEnum.SuperAdmin, Picture = @"data:image/png;base64,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" }); writeRepo.Create <CoreUser, Guid>(adminUserCore); writeRepo.Commit(); writeRepo.Dispose(); } adminUser.PasswordHash = new PasswordHasher <IdentityUser>().HashPassword(adminUser, "Password1@"); identityContext.Users.Add(adminUser); identityContext.SaveChanges(); } var context = serviceScope.ServiceProvider.GetRequiredService <ConfigurationDbContext>(); context.Database.Migrate(); if (!context.Clients.Any()) { foreach (var client in IdentityConfig.GetClients(configuration)) { context.Clients.Add(client.ToEntity()); } context.SaveChanges(); } if (context.Clients.Any() && context.Clients.CountAsync(new CancellationToken(false)).Result == 1) { foreach (var client in IdentityConfig.GetClients(configuration)) { if (!client.ClientId.Equals("carbon.app")) { context.Clients.Add(client.ToEntity()); } } context.SaveChanges(); } if (!context.IdentityResources.Any()) { foreach (var resource in IdentityConfig.GetIdentityResources()) { context.IdentityResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiResources.Any()) { foreach (var resource in IdentityConfig.GetApiResources(configuration)) { context.ApiResources.Add(resource.ToEntity()); } context.SaveChanges(); } } }