package edu.asu.spring.quadriga.service.publicwebsite.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import edu.asu.spring.quadriga.dao.publicwebsite.IAboutTextDAO;
import edu.asu.spring.quadriga.dao.publicwebsite.impl.AboutTextDAO;
import edu.asu.spring.quadriga.domain.settings.IAboutText;
import edu.asu.spring.quadriga.domain.settings.impl.AboutText;
import edu.asu.spring.quadriga.dto.AboutTextDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.publicwebsite.mapper.IAboutTextMapper;
import edu.asu.spring.quadriga.service.publicwebsite.mapper.impl.AboutTextMapper;
/**
* @author Nischal Samji
*
* Test class for the AboutText Manager
*
*/
public class AboutTextManagerTest {
@InjectMocks
private AboutTextManager aboutTextManager;
@Spy
private IAboutTextMapper abtTxtMapper = new AboutTextMapper();
@Mock
private IAboutTextDAO mockedAboutTextDAO = Mockito.mock(AboutTextDAO.class);
private ArgumentCaptor<AboutTextDTO> argument;
private IAboutText saveText;
private IAboutText updateText;
@Before
public void setUp() throws QuadrigaStorageException {
MockitoAnnotations.initMocks(this);
saveText = new AboutText();
saveText.setDescription("Save Description");
saveText.setTitle("SaveTitle");
saveText.setProjectId("PROJabscde");
updateText = new AboutText();
updateText.setId("testId1234");
updateText.setDescription("Update Description");
updateText.setTitle("UpdateTitle");
updateText.setProjectId("PROJxyzwqr");
}
@Test
public void test_saveAbout_newDTO() throws QuadrigaStorageException {
Mockito.when(mockedAboutTextDAO.generateUniqueID()).thenReturn("UniqueId1");
aboutTextManager.saveAbout("PROJabscde", saveText);
Mockito.verify(mockedAboutTextDAO).generateUniqueID();
argument = ArgumentCaptor.forClass(AboutTextDTO.class);
Mockito.verify(mockedAboutTextDAO).saveOrUpdateDTO(argument.capture());
assertEquals("UniqueId1", argument.getValue().getId());
assertEquals("PROJabscde", argument.getValue().getProjectId());
assertEquals("SaveTitle", argument.getValue().getTitle());
assertEquals("Save Description", argument.getValue().getDescription());
}
@Test
public void test_saveAbout_UpdateDTO() throws QuadrigaStorageException {
AboutTextDTO dto = new AboutTextDTO();
dto.setId("UniqueId2");
dto.setProjectId("1st");
dto.setTitle("UpdateTitle");
dto.setDescription("Update Description");
Mockito.when(mockedAboutTextDAO.getDTOByProjectId("PROJxyzwqr")).thenReturn(dto);
aboutTextManager.saveAbout("PROJxyzwqr", updateText);
argument = ArgumentCaptor.forClass(AboutTextDTO.class);
Mockito.verify(mockedAboutTextDAO, Mockito.times(1)).saveOrUpdateDTO(argument.capture());
assertEquals("testId1234", argument.getValue().getId());
assertEquals("PROJxyzwqr", argument.getValue().getProjectId());
assertEquals("UpdateTitle", argument.getValue().getTitle());
assertEquals("Update Description", argument.getValue().getDescription());
}
@Test
public void test_getAboutTextByProjectId_existingProject() throws QuadrigaStorageException {
AboutTextDTO dto = new AboutTextDTO();
dto.setProjectId("test1");
dto.setTitle("TestTitle");
dto.setDescription("Newestdescription");
dto.setId("Test1");
Mockito.when(mockedAboutTextDAO.getDTOByProjectId("test1")).thenReturn(dto);
IAboutText result = aboutTextManager.getAboutTextByProjectId("test1");
Mockito.verify(mockedAboutTextDAO, Mockito.times(1)).getDTOByProjectId("test1");
assertNotNull(result);
assertEquals("test1", result.getProjectId());
assertEquals("TestTitle", result.getTitle());
assertEquals("Newestdescription", result.getDescription());
assertEquals("Test1", result.getId());
}
@Test
public void test_getAboutTextByProjectId_emptyProject() throws QuadrigaStorageException {
Mockito.when(mockedAboutTextDAO.getDTOByProjectId("test24")).thenReturn(null);
IAboutText abtText = aboutTextManager.getAboutTextByProjectId("test24");
assertNull(abtText);
}
}