package edu.asu.spring.quadriga.service.workbench;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import edu.asu.spring.quadriga.dao.workbench.IRetrieveProjectDAO;
import edu.asu.spring.quadriga.domain.enums.EProjectAccessibility;
import edu.asu.spring.quadriga.domain.proxy.ProjectProxy;
import edu.asu.spring.quadriga.domain.workbench.IProject;
import edu.asu.spring.quadriga.dto.ProjectDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.mapper.workbench.IProjectShallowMapper;
import edu.asu.spring.quadriga.service.workbench.impl.RetrieveProjectManager;
public class RetrieveProjectManagerTest {
@Mock
private IRetrieveProjectDAO mockedDBConnect = Mockito.mock(IRetrieveProjectDAO.class);
@Mock
private IProjectShallowMapper mockedProjectShallowMapper = Mockito.mock(IProjectShallowMapper.class);
@InjectMocks
private RetrieveProjectManager retrieveProjectManagerUnderTest;
@Before
public void setUp() throws QuadrigaStorageException {
MockitoAnnotations.initMocks(this);
}
@Test
public void checkOnlyPublicProjectsAreReturned() throws QuadrigaStorageException {
Mockito.when(mockedDBConnect.getAllProjectsDTOByAccessibility("PUBLIC")).thenReturn(createPublicProjectDTOList());
Mockito.when(mockedProjectShallowMapper.getProjectDetails(Matchers.any(ProjectDTO.class))).thenReturn(createPublicIProject());
List<IProject> projectList = retrieveProjectManagerUnderTest.getProjectListByAccessibility(EProjectAccessibility.PUBLIC);
assertNotNull(projectList);
assertEquals(1, projectList.size());
assertEquals("test Project1", projectList.get(0).getProjectName());
assertEquals(EProjectAccessibility.PUBLIC, projectList.get(0).getProjectAccess());
Mockito.verify(mockedDBConnect, times(1)).getAllProjectsDTOByAccessibility("PUBLIC");
Mockito.verify(mockedProjectShallowMapper, times(1)).getProjectDetails(Matchers.any(ProjectDTO.class));
}
@Test
public void checkProjectListByAccessibilityReturnsEmptyListIfNoPublicProjects() throws QuadrigaStorageException {
Mockito.when(mockedDBConnect.getAllProjectsDTOByAccessibility("PUBLIC")).thenReturn(new ArrayList<ProjectDTO>());
List<IProject> projectList = retrieveProjectManagerUnderTest.getProjectListByAccessibility(EProjectAccessibility.PUBLIC);
assertNotNull(projectList);
assertEquals(0, projectList.size());
Mockito.verify(mockedDBConnect, times(1)).getAllProjectsDTOByAccessibility("PUBLIC");
Mockito.verify(mockedProjectShallowMapper, times(0)).getProjectDetails(Matchers.any(ProjectDTO.class));
}
private List<ProjectDTO> createPublicProjectDTOList() {
ProjectDTO project1 = new ProjectDTO();
List<ProjectDTO> projectDTOList = new ArrayList<ProjectDTO>();
projectDTOList.add(project1);
return projectDTOList;
}
private IProject createPublicIProject() {
IProject projectProxy = new ProjectProxy(retrieveProjectManagerUnderTest);
projectProxy.setCreatedBy("Created By");
projectProxy.setProjectName("test Project1");
projectProxy.setProjectAccess(EProjectAccessibility.PUBLIC);
return projectProxy;
}
}