package edu.asu.spring.quadriga.service.projectblog;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.verify;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import edu.asu.spring.quadriga.dao.projectblog.IProjectBlogEntryDAO;
import edu.asu.spring.quadriga.domain.impl.projectblog.ProjectBlogEntry;
import edu.asu.spring.quadriga.domain.projectblog.IProjectBlogEntry;
import edu.asu.spring.quadriga.dto.ProjectBlogEntryDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.mapper.ProjectBlogEntryDTOMapper;
import edu.asu.spring.quadriga.service.projectblog.IProjectBlogEntryManager;
import edu.asu.spring.quadriga.service.projectblog.impl.ProjectBlogEntryManager;
/**
* This class tests the following methods of class
* {@linkplain ProjectBlogEntryManager}
* <ol>
* <li>1.
* {@linkplain ProjectBlogEntryManager#addNewProjectBlogEntry(IProjectBlogEntry)}
* </li>
* <li>2.
* {@linkplain ProjectBlogEntryManager#getProjectBlogEntryList(String, Integer)}
* </li>
* </ol>
*
* @author PawanMahalle
*
*/
public class ProjectBlogEntryManagerTest {
private static final String DUMMY_PROJECT_ID = "PROJECT_ID";
private static final Integer LIMIT = 2;
private static final String UNIQUE_BLGE_ID = "UNIQUE_BLGE_ID";
private static final String TITLE_NEW = "TITLE_NEW";
private static final String DESCRIPTION_NEW = "DESCRIPTION_NEW";
private static final String BLGE_ID_1 = "BLGE1";
private static final String TITLE_1 = "TITLE_1";
private static final String DESCRIPTION_1 = "TITLE_1";
private static final String BLGE_ID_2 = "BLGE2";
private static final String TITLE_2 = "TITLE_2";
private static final String DESCRIPTION_2 = "TITLE_2";
@Mock
private IProjectBlogEntryDAO projectBlogEntryDAO = Mockito.mock(IProjectBlogEntryDAO.class);
@Mock
private ProjectBlogEntryDTOMapper projectBlogEntryDTOMapper = Mockito.mock(ProjectBlogEntryDTOMapper.class);
@InjectMocks
private ProjectBlogEntryManager projectBlogEntryManagerUnderTest;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
/**
* tests
* {@link IProjectBlogEntryManager#getProjectBlogEntryList(String, Integer)}
* method responsible for retrieving list of project blog entries for a
* project
*
* @throws QuadrigaStorageException
*/
@Test
public void getProjectBlogEntryListTest() throws QuadrigaStorageException {
// Creating dummy list of blog entry DTOs to return
List<ProjectBlogEntryDTO> projectBlogEntryDTOList = new ArrayList<>();
ProjectBlogEntryDTO blgeDTO1 = createProjectBlogEntryDTO(BLGE_ID_1, TITLE_1, DESCRIPTION_1);
projectBlogEntryDTOList.add(blgeDTO1);
ProjectBlogEntryDTO blgeDTO2 = createProjectBlogEntryDTO(BLGE_ID_2, TITLE_2, DESCRIPTION_2);
projectBlogEntryDTOList.add(blgeDTO2);
// Return the dummy list of blog entries created above when method to
// get project blog entries is called
Mockito.when(projectBlogEntryDAO.getProjectBlogEntryDTOListByProjectId(DUMMY_PROJECT_ID, LIMIT))
.thenReturn(projectBlogEntryDTOList);
// Creating dummy project blog entry
IProjectBlogEntry blge1 = new ProjectBlogEntry();
blge1.setProjectBlogEntryId(BLGE_ID_1);
blge1.setTitle(TITLE_1);
blge1.setDescription(DESCRIPTION_1);
Mockito.when(projectBlogEntryDTOMapper.getProjectBlogEntry(blgeDTO1)).thenReturn(blge1);
// Creating dummy project blog entry
IProjectBlogEntry blge2 = new ProjectBlogEntry();
blge2.setProjectBlogEntryId(BLGE_ID_2);
blge2.setTitle(TITLE_2);
blge2.setDescription(DESCRIPTION_2);
Mockito.when(projectBlogEntryDTOMapper.getProjectBlogEntry(blgeDTO2)).thenReturn(blge2);
// Calling the method to test
List<IProjectBlogEntry> projectBlogEntryList = projectBlogEntryManagerUnderTest
.getProjectBlogEntryList(DUMMY_PROJECT_ID, LIMIT);
// Asserting the details
assertProjectBlogEntryList(projectBlogEntryList);
}
private void assertProjectBlogEntryList(List<IProjectBlogEntry> projectBlogEntryList) {
// Assert that exactly 2 entries are fetched
assertEquals(2, projectBlogEntryList.size());
assertEquals(BLGE_ID_1, projectBlogEntryList.get(0).getProjectBlogEntryId());
assertEquals(TITLE_1, projectBlogEntryList.get(0).getTitle());
assertEquals(DESCRIPTION_1, projectBlogEntryList.get(0).getDescription());
assertEquals(BLGE_ID_2, projectBlogEntryList.get(1).getProjectBlogEntryId());
assertEquals(TITLE_2, projectBlogEntryList.get(1).getTitle());
assertEquals(DESCRIPTION_2, projectBlogEntryList.get(1).getDescription());
}
private ProjectBlogEntryDTO createProjectBlogEntryDTO(String id, String title, String description) {
ProjectBlogEntryDTO projectBlogEntryDTO = new ProjectBlogEntryDTO();
projectBlogEntryDTO.setProjectBlogEntryId(id);
projectBlogEntryDTO.setTitle(title);
projectBlogEntryDTO.setDescription(description);
return projectBlogEntryDTO;
}
/**
* tests
* {@link IProjectBlogEntryManager#addNewProjectBlogEntry(IProjectBlogEntry)}
* method responsible for adding a project blog entry into database
*
* @throws QuadrigaStorageException
*/
@Test
public void addNewProjectBlogEntryTest() throws QuadrigaStorageException {
// Creating dummy project blog entry
IProjectBlogEntry projectBlogEntry = new ProjectBlogEntry();
projectBlogEntry.setTitle(TITLE_NEW);
projectBlogEntry.setDescription(DESCRIPTION_NEW);
Mockito.when(projectBlogEntryDAO.generateUniqueID()).thenReturn(UNIQUE_BLGE_ID);
// Mocked ProjectBlogEntryDTO instance
ProjectBlogEntryDTO projectBlogEntryDTO = createProjectBlogEntryDTO(UNIQUE_BLGE_ID, TITLE_NEW, DESCRIPTION_NEW);
Mockito.when(projectBlogEntryDTOMapper.getProjectBlogEntryDTO(projectBlogEntry))
.thenReturn(projectBlogEntryDTO);
// Calling the method to test
projectBlogEntryManagerUnderTest.addNewProjectBlogEntry(projectBlogEntry);
// Assert that id is assigned to projectBlogEntry object by
// addNewProjectBlogEntry method
assertEquals(UNIQUE_BLGE_ID, projectBlogEntry.getProjectBlogEntryId());
// Assert that projectBlogEntry has date assigned by
// addNewProjectBlogEntry method
assertNotNull(projectBlogEntry.getCreatedDate());
// Verifying that saveNewDTO method is called
verify(projectBlogEntryDAO).saveNewDTO(projectBlogEntryDTO);
}
/**
* tests
* {@link IProjectBlogEntryManager#getProjectBlogEntryDetails(projectBlogEntryId)}
* method responsible for fetching the blog entry identified by project blog
* entry id
*
* @throws QuadrigaStorageException
*/
@Test
public void getProjectBlogEntryDetailsTest() throws QuadrigaStorageException {
// Creating the dummy project Blog Entry
IProjectBlogEntry projectBlogEntry = new ProjectBlogEntry();
projectBlogEntry.setTitle(TITLE_NEW);
projectBlogEntry.setDescription(DESCRIPTION_NEW);
projectBlogEntry.setProjectBlogEntryId(BLGE_ID_1);
// Mocked ProjectBlogEntryDTO instance
ProjectBlogEntryDTO projectBlogEntryDTO = createProjectBlogEntryDTO(UNIQUE_BLGE_ID, TITLE_NEW, DESCRIPTION_NEW);
// Returning dummy project blog entry DTO
Mockito.when(projectBlogEntryDAO.getDTO(BLGE_ID_1)).thenReturn(projectBlogEntryDTO);
// Returning the created projectBlogEntry
Mockito.when(projectBlogEntryDTOMapper.getProjectBlogEntry(projectBlogEntryDTO)).thenReturn(projectBlogEntry);
// Calling the method to test
IProjectBlogEntry resultProjectBlogEntry = projectBlogEntryManagerUnderTest
.getProjectBlogEntryDetails(BLGE_ID_1);
// assert that the resultProjectBlogEntry has blog entry id as expected
assertEquals(resultProjectBlogEntry.getProjectBlogEntryId(), BLGE_ID_1);
// assert that the resultProjectBlogEntry has Title as expected
assertEquals(resultProjectBlogEntry.getTitle(), TITLE_NEW);
// assert that the resultProjectBlogEntry has description as expected
assertEquals(resultProjectBlogEntry.getDescription(), DESCRIPTION_NEW);
}
/**
* tests
* {@link IProjectBlogEntryManager#getProjectBlogEntryDetails(projectBlogEntryId)}
* method responsible for fetching the blog entry identified by project blog
* entry id
*
* when there is no entry with the blog entry id
*
* @throws QuadrigaStorageException
*/
@Test
public void getProjectBlogEntryDetailsTestIdNotExist() throws QuadrigaStorageException {
// Calling the method to test with blog entry id does not exist
IProjectBlogEntry resultProjectBlogEntryWhenIdNotExist = projectBlogEntryManagerUnderTest
.getProjectBlogEntryDetails(BLGE_ID_2);
// assert that the resultProjectBlogEntry is null
assertEquals(resultProjectBlogEntryWhenIdNotExist, null);
}
}