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>();
        }
예제 #2
0
        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);
        }
예제 #4
0
        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);
        }
예제 #8
0
        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);
        }
예제 #13
0
        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);
        }
예제 #14
0
        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();
                }
            }
        }