public void TestCaseSetup()
        {
            _groupProductDB = new GroupProductDB
            {
                Id           = "00000000-0000-0000-0000-000000000004",
                GroupBoardId = "00000000-0000-0000-0000-000000000003",
                Information  = "Information",
                ProductId    = "2"
            };
            _groupProduct = new GroupProduct
            {
                Id           = "00000000-0000-0000-0000-000000000004",
                GroupBoardId = "00000000-0000-0000-0000-000000000003",
                Information  = "Information",
                ProductId    = "2"
            };
            _groupBoardDB = new GroupBoardDB
            {
                Id            = "00000000-0000-0000-0000-000000000003",
                CreatorId     = "2",
                Information   = "Some product",
                Name          = "Best",
                Created       = DateTime.UtcNow,
                Deleted       = null,
                IsNotDeleted  = true,
                Modified      = DateTime.UtcNow,
                GroupId       = "00000000-0000-0000-0000-000000000001",
                GroupProducts = null
            };
            _groupUserDB = new GroupUserDB
            {
                GroupId             = "00000000-0000-0000-0000-000000000001",
                RightToCreateBoards = true
            };
            _groupRepositoryMock = new Mock <IGroupRepository>();

            var config = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new GroupProfile());
                cfg.AddProfile(new GroupBoardProfile());
                cfg.AddProfile(new GroupProductProfile());
                cfg.AddProfile(new GroupUserProfile());
                cfg.AddProfile(new GroupCommentProfile());
            });

            _mapper = (new Mapper(config)).DefaultContext.Mapper;
            _groupProductService = new GroupProductService(_groupRepositoryMock.Object, _mapper);
            _selectedBoardList   = new List <GroupBoardDB>();
            _selectedUserList    = new List <GroupUserDB>();
            _selectedProductList = new List <GroupProductDB>();
        }
        public async Task SeedAsync(IList <string> prodIds)
        {
            await CreateUsers();

            var user = AddFriendsToFirstUser();

            CreateProductsAndAddThemToTheUsers();

            CreateGroups();

            await _context.SaveChangesAsync().ConfigureAwait(false);

            async Task CreateUsers()
            {
                for (int i = 0; i < 10; i++)
                {
                    var userToCreate = new UserDB
                    {
                        Id             = i.ToString(),
                        UserName       = $"UserName{i}",
                        Email          = _faker.Internet.Email(),
                        EmailConfirmed = true,
                        Created        = DateTime.UtcNow.AddDays(-15)
                    };
                    _context.Users.Add(userToCreate);
                }
                await _context.SaveChangesAsync().ConfigureAwait(false);

                for (int i = 0; i < 10; i++)
                {
                    await _manager.AddPasswordAsync(i.ToString(), $"{i}{i}{i}{i}{i}{i}").ConfigureAwait(false);
                }
            }

            UserDB AddFriendsToFirstUser()
            {
                var user0 = _context.Users.Include(u => u.Friends).Include(u => u.ProductDescriptions.Select(d => d.Product)).First(u => u.Id == "0");
                var user1 = _context.Users.Include(u => u.Friends).Include(u => u.ProductDescriptions.Select(d => d.Product)).First(u => u.Id == "1");
                var user2 = _context.Users.Include(u => u.Friends).Include(u => u.ProductDescriptions.Select(d => d.Product)).First(u => u.Id == "2");
                var user3 = _context.Users.Include(u => u.Friends).Include(u => u.ProductDescriptions.Select(d => d.Product)).First(u => u.Id == "3");

                user0.Friends.Add(user1);
                user0.Friends.Add(user2);
                user0.Friends.Add(user3);

                user1.Friends.Add(user0);

                user0.Modified = DateTime.UtcNow.AddDays(-3);

                return(user0);
            }

            void CreateProductsAndAddThemToTheUsers()
            {
                for (int i = 0; i < 7; i++)
                {
                    var rating          = _random.Next(1, 6);
                    var prodDescription = new UserProductDescriptionDB
                    {
                        UserId      = "0",
                        ProductId   = prodIds[i],
                        Rating      = rating,
                        Description = productDescriptions[rating - 1],
                        Created     = DateTime.UtcNow.AddDays(-2)
                    };
                    _context.UserProductDescriptions.Add(prodDescription);

                    _context.SaveChanges();
                }

                for (int i = 1; i < 10; i++)
                {
                    foreach (var prodId in prodIds)
                    {
                        var rating          = _random.Next(1, 6);
                        var prodDescription = new UserProductDescriptionDB
                        {
                            UserId      = i.ToString(),
                            ProductId   = prodId,
                            Rating      = rating,
                            Description = productDescriptions[rating - 1],
                            Created     = DateTime.UtcNow.AddDays(-2)
                        };
                        _context.UserProductDescriptions.Add(prodDescription);
                        _context.SaveChanges();
                    }
                }
            }

            void CreateGroups()
            {
                for (int i = 0; i < 3; i++)
                {
                    var group = new GroupDB
                    {
                        Id           = Guid.NewGuid().ToString(),
                        Name         = $"{_faker.Lorem.Word()} group",
                        Information  = _faker.Lorem.Sentence(),
                        AdminId      = i.ToString(),
                        Created      = DateTime.UtcNow.AddDays(-4),
                        IsNotDeleted = true
                    };
                    _context.Groups.Add(group);

                    for (int j = 0; j < 10; j++)
                    {
                        var groupUser = new GroupUserDB
                        {
                            UserName            = $"UserName{i}",
                            UserId              = j.ToString(),
                            GroupId             = group.Id,
                            IsConfirmed         = true,
                            RightToCreateBoards = true,
                            Created             = DateTime.UtcNow.AddDays(-1)
                        };
                        _context.GroupUsers.Add(groupUser);
                    }

                    for (int j = 0; j < 2; j++)
                    {
                        var gbName     = $"Board about {_faker.Lorem.Word()}";
                        var groupBoard = new GroupBoardDB
                        {
                            Id           = Guid.NewGuid().ToString(),
                            GroupId      = group.Id,
                            CreatorId    = i.ToString(),
                            Name         = gbName,
                            Information  = _faker.Lorem.Sentence(),
                            Created      = DateTime.UtcNow.AddDays(-2),
                            IsNotDeleted = true
                        };
                        _context.GroupBoards.Add(groupBoard);

                        var groupProduct = new GroupProductDB
                        {
                            Id           = Guid.NewGuid().ToString(),
                            GroupBoardId = groupBoard.Id,
                            Name         = _faker.Commerce.ProductName(),
                            ProductId    = prodIds[_random.Next(0, 9)],
                            Information  = _faker.Lorem.Sentence()
                        };
                        _context.GroupProducts.Add(groupProduct);

                        for (int k = 0; k < 10; k++)
                        {
                            var groupComment = new GroupCommentDB
                            {
                                Id            = Guid.NewGuid().ToString(),
                                GroupBoardId  = groupBoard.Id,
                                CommentatorId = _random.Next(0, 10).ToString(),
                                Comment       = _faker.Lorem.Sentence()
                            };
                            _context.GroupComments.Add(groupComment);
                        }
                    }
                }
            }
        }