public void TestInsertAndGetId()
        {
            // Arrange
            using var uow = BeginUow();
            var userRepo            = GetRepository <User, long>();
            var roleRepo            = GetRepository <Role>();
            var creationAuditedRepo = GetRepository <TestCreationAudited>();

            // Act
            var role3 = new Role
            {
                Name = "Role3"
            };

            roleRepo.InsertAndGetId(role3);

            var user5 = new User
            {
                Name   = "User5",
                RoleId = role3.Id
            };

            userRepo.InsertAndGetId(user5);

            var creationAudited1 = new TestCreationAudited();

            creationAuditedRepo.InsertAndGetId(creationAudited1);

            // Assert
            Assert.Equal(3, role3.Id);
            Assert.NotNull(roleRepo.GetAll().AsNoTracking().SingleOrDefault(p => p.Id == 3));
            Assert.Equal(3, roleRepo.GetAll().AsNoTracking().Count());

            Assert.Equal(5, user5.Id);
            Assert.NotNull(userRepo.GetAll().AsNoTracking().SingleOrDefault(p => p.Id == 5));
            Assert.Equal(5, userRepo.GetAll().AsNoTracking().Count());

            Assert.Equal(1, creationAudited1.Id);
            Assert.Equal(1, creationAuditedRepo.GetAll().AsNoTracking().SingleOrDefault(p => p.Id == 1)?.CreatorUserId);
            Assert.Equal(1, creationAuditedRepo.GetAll().AsNoTracking().Count());

            // Complete uow
            uow.Complete();
        }
        public async Task TestInsertAndGetIdAsync()
        {
            // Arrange
            using var uow = BeginUow();
            var userRepo            = GetRepository <User, long>();
            var roleRepo            = GetRepository <Role>();
            var creationAuditedRepo = GetRepository <TestCreationAudited>();

            // Act
            var role3 = new Role
            {
                Name = "Role3"
            };
            await roleRepo.InsertAndGetIdAsync(role3);

            var user5 = new User
            {
                Name   = "User5",
                RoleId = 1
            };
            await userRepo.InsertAndGetIdAsync(user5);

            var creationAudited1 = new TestCreationAudited();
            await creationAuditedRepo.InsertAndGetIdAsync(creationAudited1);

            // Assert
            Assert.Equal(3, role3.Id);
            Assert.NotNull(await roleRepo.GetAll().AsNoTracking().SingleOrDefaultAsync(p => p.Id == 3));
            Assert.Equal(3, await roleRepo.GetAll().AsNoTracking().CountAsync());

            Assert.Equal(5, user5.Id);
            Assert.Equal(5, await userRepo.GetAll().AsNoTracking().CountAsync());
            Assert.NotNull(await userRepo.GetAll().AsNoTracking().SingleOrDefaultAsync(p => p.Id == 5));

            Assert.Equal(1, creationAudited1.Id);
            Assert.Equal(1, (await creationAuditedRepo.GetAll().AsNoTracking().SingleOrDefaultAsync(p => p.Id == 1))?.CreatorUserId);
            Assert.Equal(1, await creationAuditedRepo.GetAll().AsNoTracking().CountAsync());

            // Complete uow
            await uow.CompleteAsync();
        }
        public void TestInsert()
        {
            // Arrange
            using var uow = BeginUow();
            var userRepo            = GetRepository <User, long>();
            var roleRepo            = GetRepository <Role>();
            var creationAuditedRepo = GetRepository <TestCreationAudited>();

            #region Insert but not SaveChanges

            // Act
            var user5 = new User
            {
                Name   = "User5",
                RoleId = 1
            };
            userRepo.Insert(user5);

            var role3 = new Role
            {
                Name = "Role3",
            };
            roleRepo.Insert(role3);

            var creationAudited1 = new TestCreationAudited();
            creationAuditedRepo.Insert(creationAudited1);

            // Assert
            Assert.Equal(0, user5.Id);
            Assert.Equal(4, userRepo.GetAll().AsNoTracking().Count());

            Assert.Equal(0, role3.Id);
            Assert.Equal(2, roleRepo.GetAll().AsNoTracking().Count());

            Assert.Equal(0, creationAudited1.Id);
            Assert.Equal(0, creationAuditedRepo.GetAll().AsNoTracking().Count());

            #endregion

            #region SaveChanges

            // Act
            ((IUnitOfWork)uow).SaveChanges();

            // Assert
            Assert.Equal(5, user5.Id);
            Assert.NotNull(userRepo.GetAll().AsNoTracking().SingleOrDefault(p => p.Id == 5));
            Assert.Equal(5, userRepo.GetAll().AsNoTracking().Count());

            Assert.Equal(3, role3.Id);
            Assert.NotNull(roleRepo.GetAll().AsNoTracking().SingleOrDefault(p => p.Id == 3));
            Assert.Equal(3, roleRepo.GetAll().AsNoTracking().Count());

            Assert.Equal(1, creationAudited1.Id);
            Assert.Equal(1, creationAuditedRepo.GetAll().AsNoTracking().SingleOrDefault(p => p.Id == 1)?.CreatorUserId);
            Assert.Equal(1, creationAuditedRepo.GetAll().AsNoTracking().Count());

            #endregion

            // Complete uow
            uow.Complete();
        }