private TestEventRepository CreateFilledEventRepository(TestUserRepository userRepo)
        {
            var repo   = CreateTestEventRepository();
            var users  = userRepo.GetUsersByRole(RoleType.Manager);
            var @event = CreateEvent(new TGuid(0).ToGuid().ToString());

            @event.Id = 1;
            repo.Events.Add(@event);
            var workEvent = CreateEvent(new TGuid(2).ToGuid().ToString());

            workEvent.Id = 2;
            repo.Events.Add(workEvent);
            foreach (var user in users)
            {
                repo.EventsUsers.Add(new WorkEventUserRelation(@event.Id, user.Id)
                {
                    State = EventState.New
                });
                repo.EventsUsers.Add(new WorkEventUserRelation(workEvent.Id, user.Id)
                {
                    State = EventState.Seen
                });
            }
            return(repo);
        }
        private static void AddPartitionsForStage(WorkItem stage, TestWorkItemRepository workItemRepo, TestUserRepository userRepo, List <ApplicationUser> managers, ApplicationUser mainEngeneer)
        {
            var executors = userRepo.GetUsersByRole(Resources.Executor).Except(userRepo.GetUsersByRole(Resources.MainProjectEngineer)).ToList();

            for (int i = 0; i < managers.Count; i++)
            {
                var states = new List <WorkItemState> {
                    WorkItemState.AtWork, WorkItemState.Planned, WorkItemState.Done, WorkItemState.New
                };
                foreach (var state in states)
                {
                    var partition = CreateWorkItem(workItemRepo.WorkItems, states.IndexOf(state), WorkItemType.Partition, mainEngeneer, managers[i], state);
                    partition.ParentId = stage.Id;
                    workItemRepo.WorkItems.Add(partition);
                    AddTasksForPartition(partition, workItemRepo, managers[i], executors);
                }
            }
        }
        private static void AddStagesForProject(WorkItem project, TestWorkItemRepository workItemRepo, TestUserRepository userRepo, List <ApplicationUser> mainEngeneers, ApplicationUser mainEngeneer)
        {
            var managers = userRepo.GetUsersByRole(Resources.Manager).ToList();

            for (int i = 0; i < 2; i++)
            {
                var stage = CreateWorkItem(workItemRepo.WorkItems, i, WorkItemType.Stage, mainEngeneer, mainEngeneer, WorkItemState.AtWork);
                stage.ParentId = project.Id;
                workItemRepo.WorkItems.Add(stage);
                AddPartitionsForStage(stage, workItemRepo, userRepo, managers, mainEngeneer);
            }
        }
        /// <summary>
        /// СОздание тестовых рабочих элементов. Для каждого ГИП по проекту. В каждом проекте - 2 стадии
        /// В каждой стадии по 4 раздела для каждого РН. В каждом разделе:
        /// Если раздел не в работе, то по заданию для каждого исполнителя в том же состоянии, что и раздел.
        /// Если раздел в работе, то по 10 заданий для каждого исполнителя в разных состояниях (на одно состояние одно задание, созданное РН
        /// и одно задание созданное самим исполнителем) Задания со статусом новые - без исполнителя.
        /// </summary>
        /// <param name="userRepo"></param>
        /// <returns></returns>
        public static TestWorkItemRepository CreateFilledWorkItemRepository(TestUserRepository userRepo)
        {
            var workItemRepository = new TestWorkItemRepository(userRepo);
            var mainEngeneers      = userRepo.GetUsersByRole(Resources.MainProjectEngineer).ToList();

            for (int i = 0; i < mainEngeneers.Count; i++)
            {
                var project = CreateWorkItem(workItemRepository.WorkItems, i, WorkItemType.Project, mainEngeneers[i], mainEngeneers[i], WorkItemState.AtWork);
                workItemRepository.WorkItems.Add(project);
                AddStagesForProject(project, workItemRepository, userRepo, mainEngeneers, mainEngeneers[i]);
            }

            return(workItemRepository);
        }