@Test
  public void testDefaultAssigneeComponentLead()
      throws OperationNotPermittedException, InvalidUserException, InvalidCredentialException {
    final User componentLead = userMockFactory.getComponentLead();
    final GenericValue projectWithDefaultUnassigned =
        projectMockFactory.getProjectWithDefaultUnassigned();
    final GenericValue componentWithComponentAssignee =
        componentMockFactory.getComponentWithComponentAssignee();

    // Should return false as components lead is unassignable, unassigned is turned off and project
    // lead is unassignable
    _testNoDefaultAssignee(projectWithDefaultUnassigned, componentWithComponentAssignee);

    when(permissionManager.hasPermission(
            Permissions.ASSIGNABLE_USER,
            projectFactory.getProject(projectWithDefaultUnassigned),
            ApplicationUsers.from(componentLead)))
        .thenReturn(Boolean.TRUE);

    // Should return true as component lead is assignable
    _testDefaultAssignee(
        projectWithDefaultUnassigned, componentWithComponentAssignee, componentLead);
  }
  @Before
  public void setUp() throws Exception {
    final MockitoContainer mockitoContainer = MockitoMocksInContainer.rule(mockitoMocksInContainer);

    testedObject =
        new DefaultProjectManager(
            ofBizDelegator,
            nodeAssociationStore,
            projectFactory,
            mock(ProjectRoleManager.class),
            issueManager,
            mock(AvatarManager.class),
            userManager,
            mock(ProjectCategoryStore.class),
            ComponentAccessor.getApplicationProperties(),
            mock(ProjectKeyStore.class),
            new MockTransactionSupport(),
            mock(PropertiesManager.class),
            mock(JsonEntityPropertyManager.class),
            mock(EventPublisher.class));

    mockitoContainer
        .getMockWorker()
        .addMock(OfBizDelegator.class, ofBizDelegator)
        .addMock(UserManager.class, userManager)
        .addMock(PermissionManager.class, permissionManager)
        .addMock(IssueSecurityLevelManager.class, issueSecurityLevelManager)
        .addMock(ProjectManager.class, testedObject)
        .init();

    when(projectFactory.getProject(Mockito.<GenericValue>any()))
        .thenAnswer(
            new Answer<Project>() {

              @Override
              public Project answer(final InvocationOnMock invocation) throws Throwable {
                return new ProjectMock((GenericValue) invocation.getArguments()[0]);
              }
            });
    when(projectFactory.getProjects(Mockito.<Collection<GenericValue>>any()))
        .thenAnswer(
            new Answer<List<Project>>() {

              @Override
              public List<Project> answer(final InvocationOnMock invocation) throws Throwable {
                final List<Project> result = new LinkedList<Project>();
                @SuppressWarnings("unchecked")
                final Collection<GenericValue> projectGVs =
                    (Collection<GenericValue>) invocation.getArguments()[0];
                for (final GenericValue projectGV : projectGVs) {
                  result.add(new ProjectMock(projectGV));
                }
                return result;
              }
            });

    project1 = addProject(Long.valueOf(100), "ABC", "Project 1", Long.valueOf(100));
    projectGV1 = ofBizDelegator.findById("Project", project1.getId());
    project2 = addProject(Long.valueOf(101), "XYZ", "Project 2", Long.valueOf(101));

    addIssue(project1, Long.valueOf(99));
    addIssue(project1, Long.valueOf(100));
    addIssue(project1, Long.valueOf(101));
    addIssue(project1, Long.valueOf(102));

    projectCategory = addProjectCategory(Long.valueOf(30), "foo", "bar");
    projectCategory2 = addProjectCategory(Long.valueOf(31), "bib", "la");
  }