private static async Task TestUserProjectRepositoryManyToMany()
        {
            IUserRepository userRepo = new UserRepository(_tableName);

            var u1 = new User {
                Id = "U1", Name = "User 1", FirstName = "User", LastName = "A", Email = "*****@*****.**"
            };
            await userRepo.AddUser(u1);


            IUserProjectRepository repo = new UserProjectRepository(_tableName);

            var u1p1 = new UserProject {
                UserId = u1.Id, ProjectId = "P1", Role = "owner"
            };
            await repo.AddProjectToUser(u1p1);

            var u1p2 = new UserProject {
                UserId = u1.Id, ProjectId = "P2", Role = "member"
            };
            await repo.AddProjectToUser(u1p2);

            Console.WriteLine("Getting projects by user U1");
            var allUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            foreach (var item in allUPU1)
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }

            Console.WriteLine("Getting users by project P1");
            var usersP1 = await repo.GetUsersByProjectAsync("P1");

            foreach (var item in usersP1)
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
            Console.WriteLine("Getting users by project P2");
            var usersP2 = await repo.GetUsersByProjectAsync("P2");

            foreach (var item in usersP2)
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }

            Console.WriteLine("Deleting projects P1 and P2 for user U1");
            await repo.RemoveProjectFromUser(u1p1.UserId, u1p1.ProjectId);

            await repo.RemoveProjectFromUser(u1p2.UserId, u1p2.ProjectId);

            Console.WriteLine("Getting projects by user U1 - should be empty");
            var deletedUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            foreach (var item in deletedUPU1)
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
        }
        public async void TestRepo_Batch_UserProjectRepository()
        {
            var u1 = new User {
                Id = "U1", Name = "User 1", FirstName = "User", LastName = "A", Email = "*****@*****.**"
            };

            IUserProjectRepository repo = new UserProjectRepository(_tableName, _serviceUrl);

            var itemsToCreate = new List <UserProject>();

            for (int i = 50; i < 60; i++)
            {
                var up = new UserProject {
                    UserId = u1.Id, ProjectId = "P" + i, Role = "member"
                };
                itemsToCreate.Add(up);
            }
            await repo.BatchAddProjectsToUser(u1.Id, itemsToCreate);

            var list = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Equal(10, list.Count);

            for (int i = 0; i < 10; i++)
            {
                var item = list[i];
                var id   = i + 50;
                Assert.NotNull(item);
                Assert.Equal(u1.Id, item.UserId);
                Assert.Equal("P" + id, item.ProjectId);
                Assert.Equal("member", item.Role);
            }

            var itemsToDelete = new List <UserProject>();

            for (int i = 50; i < 60; i++)
            {
                var up = new UserProject {
                    UserId = u1.Id, ProjectId = "P" + i
                };
                itemsToDelete.Add(up);
            }
            await repo.BatchRemoveProjectsFromUser(u1.Id, itemsToDelete);

            var emptyList = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Empty(emptyList);
        }
        public async void TestRepo_UserProjectRepository()
        {
            var u1 = new User {
                Id = "U1", Name = "User 1", FirstName = "User", LastName = "A", Email = "*****@*****.**"
            };

            IUserProjectRepository repo = new UserProjectRepository(_tableName, _serviceUrl);

            var allUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Equal(0, allUPU1.Count);

            var u1p1 = new UserProject {
                UserId = u1.Id, ProjectId = "P1", Role = "owner"
            };
            await repo.AddProjectToUser(u1p1);

            allUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Equal(1, allUPU1.Count);

            var u1p2 = new UserProject {
                UserId = u1.Id, ProjectId = "P2", Role = "member"
            };
            await repo.AddProjectToUser(u1p2);

            allUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Equal(2, allUPU1.Count);
            Assert.Equal(u1.Id, allUPU1[0].UserId);
            Assert.Equal("P1", allUPU1[0].ProjectId);
            Assert.Equal("owner", allUPU1[0].Role);
            Assert.Equal(u1.Id, allUPU1[1].UserId);
            Assert.Equal("P2", allUPU1[1].ProjectId);
            Assert.Equal("member", allUPU1[1].Role);

            var usersP1 = await repo.GetUsersByProjectAsync("P1");

            Assert.Equal(1, usersP1.Count);
            Assert.Equal(u1.Id, usersP1[0].UserId);
            Assert.Equal("P1", usersP1[0].ProjectId);
            Assert.Equal("owner", usersP1[0].Role);

            var usersP2 = await repo.GetUsersByProjectAsync("P2");

            Assert.Equal(1, usersP2.Count);
            Assert.Equal(u1.Id, usersP2[0].UserId);
            Assert.Equal("P2", usersP2[0].ProjectId);
            Assert.Equal("member", usersP2[0].Role);

            await repo.RemoveProjectFromUser(u1p1.UserId, u1p1.ProjectId);

            allUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Equal(1, allUPU1.Count);

            await repo.RemoveProjectFromUser(u1p2.UserId, u1p2.ProjectId);

            allUPU1 = await repo.GetProjectsByUserAsync(u1.Id);

            Assert.Equal(0, allUPU1.Count);
        }