package gov.samhsa.consent2share.service.audit;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyByte;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import gov.samhsa.consent2share.domain.audit.ModifiedEntityTypeEntity;
import gov.samhsa.consent2share.domain.audit.ModifiedEntityTypeEntityRepository;
import gov.samhsa.consent2share.domain.audit.RevisionInfoEntity;
import gov.samhsa.consent2share.domain.audit.RevisionInfoEntityRepository;
import gov.samhsa.consent2share.domain.patient.Patient;
import gov.samhsa.consent2share.domain.patient.PatientRepository;
import gov.samhsa.consent2share.domain.staff.StaffRepository;
import gov.samhsa.consent2share.service.dto.HistoryDto;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class AuditServiceImplTest {
@Mock
EntityManagerFactory entityManagerFactory;
@Mock
PatientRepository patientRepository;
@Mock
RevisionInfoEntityRepository patientRevisionEntityRepository;
@Mock
ModifiedEntityTypeEntityRepository modifiedEntityTypeEntityRepository;
@Mock
StaffRepository staffRepository;
@InjectMocks
AuditServiceImpl pasut;
@Before
public void setUp() {
RevisionInfoEntity patientRevisionEntity = mock(RevisionInfoEntity.class);
when(patientRevisionEntityRepository.findOneById(anyLong()))
.thenReturn(patientRevisionEntity);
Patient patient = mock(Patient.class);
when(patientRepository.findByUsername(anyString())).thenReturn(patient);
when(patientRepository.findOne(anyLong())).thenReturn(patient);
}
@Test
public void testGetReversed() {
List<HistoryDto> historyList = new ArrayList<HistoryDto>();
List<HistoryDto> historyReversedExpected = new ArrayList<HistoryDto>();
HistoryDto hd1 = mock(HistoryDto.class);
historyList.add(hd1);
HistoryDto hd2 = mock(HistoryDto.class);
historyList.add(hd2);
HistoryDto hd3 = mock(HistoryDto.class);
historyList.add(hd3);
historyReversedExpected.add(hd3);
historyReversedExpected.add(hd2);
historyReversedExpected.add(hd1);
List<HistoryDto> historyReversed = pasut.getReversed(historyList);
Assert.assertEquals(historyReversedExpected, historyReversed);
}
@Test
public void testFindHistoryDetail() {
AuditService pasutSpy = spy(pasut);
Number n = mock(Number.class);
HistoryDto hd = mock(HistoryDto.class);
RevisionInfoEntity patientRevisionEntity = mock(RevisionInfoEntity.class);
@SuppressWarnings("unchecked")
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = mock(List.class);
Patient patient = mock(Patient.class);
when(pasutSpy.makeHistoryDto()).thenReturn(hd);
when(patientRevisionEntityRepository.findOneById(n)).thenReturn(
patientRevisionEntity);
when(
modifiedEntityTypeEntityRepository
.findAllByRevision(any(RevisionInfoEntity.class)))
.thenReturn(modifiedEntityTypeEntitys);
when(patientRevisionEntity.getUsername()).thenReturn("username");
when(patientRepository.findByUsername(anyString())).thenReturn(patient);
when(patient.getLastName()).thenReturn("LastName");
when(patient.getFirstName()).thenReturn("FirstName");
when(patientRevisionEntity.getTimestamp()).thenReturn((long) 1);
pasutSpy.findHistoryDetail(n);
verify(pasutSpy, times(1)).findRevType(modifiedEntityTypeEntitys);
verify(pasutSpy, times(1)).findRevClassName(modifiedEntityTypeEntitys);
verify(hd, times(1)).setRevisionid(anyLong());
verify(hd, times(1)).setChangedBy(anyString());
verify(hd, times(1)).setTimestamp(anyString());
verify(hd, times(1)).setRecType(anyString());
verify(hd, times(1)).setType(anyString());
}
@Test
public void testFindHistoryDetails() {
List<Number> revisions = new ArrayList<Number>();
for (int i = 0; i < 3; i++) {
revisions.add(i);
}
AuditService pasutSpy = spy(pasut);
List<HistoryDto> historyDtosList = new ArrayList<HistoryDto>();
List<HistoryDto> historyDtosListSpy = spy(historyDtosList);
when(pasutSpy.makeHistoryDtos()).thenReturn(historyDtosListSpy);
pasutSpy.findHistoryDetails(revisions);
verify(historyDtosListSpy, times(3)).add(any(HistoryDto.class));
}
@Test
public void testmakeHistoryDtos_return_correct_class() {
Object object = pasut.makeHistoryDtos();
String className = object.getClass().getName();
assertEquals("java.util.ArrayList", className);
}
@Test
public void testmakeHistoryDto_return_correct_class() {
Object object = pasut.makeHistoryDto();
String className = object.getClass().getName();
assertEquals("gov.samhsa.consent2share.service.dto.HistoryDto",
className);
}
@Test
public void testFindRevType_when_type_is_create() {
Byte btype = 0;
String revType = pasut.findRevType(btype);
assertEquals("Create new entry", revType);
}
@Test
public void testFindRevType_when_type_is_modified() {
Byte btype = 1;
String revType = pasut.findRevType(btype);
assertEquals("Changed entry", revType);
}
@Test
public void testFindRevType_when_type_is_deleted() {
Byte btype = 2;
String revType = pasut.findRevType(btype);
assertEquals("Delete entry", revType);
}
@Test
public void testFindRevType_when_type_is_notVaild() {
Byte btype = 3;
String revType = pasut.findRevType(btype);
assertEquals(null, revType);
}
@Test
public void testFindRevClassName_when_modifiedEntity_size_is_one() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getEntityClassName()).thenReturn(
"gov.samhsa.consent2share.domain.patient.Patient");
String revClassName = pasut.findRevClassName(modifiedEntityTypeEntitys);
assertEquals("Patient", revClassName);
}
@Test
public void testFindRevClassName_when_modifiedEntity_size_is_two() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 1);
when(modifiedEntityTypeEntitys.get(1).getEntityClassName()).thenReturn(
"gov.samhsa.consent2share.domain.patient.Patient");
String revClassName = pasut.findRevClassName(modifiedEntityTypeEntitys);
assertEquals("Patient", revClassName);
}
@Test
public void testFindRevClassName_when_modifiedEntity_size_is_two_Second() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 0);
when(modifiedEntityTypeEntitys.get(0).getEntityClassName()).thenReturn(
"gov.samhsa.consent2share.domain.provider.IndividualProvider");
String revClassName = pasut.findRevClassName(modifiedEntityTypeEntitys);
assertEquals("Individual Provider", revClassName);
}
@Test
public void testFindRevClassName_when_modifiedEntity_size_is_three() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
String revClassName = pasut.findRevClassName(modifiedEntityTypeEntitys);
assertEquals("Add provider", revClassName);
}
@Test
public void testFindRevType_when_modifiedEntity_size_is_one() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 2);
AuditService pasutSpy = spy(pasut);
pasutSpy.findRevType(modifiedEntityTypeEntitys);
verify(pasutSpy, times(1)).findRevType((byte) 2);
}
@Test
public void testFindRevType_when_modifiedEntity_size_is_two() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 1);
when(modifiedEntityTypeEntitys.get(1).getRevisionType()).thenReturn(
(byte) 2);
AuditService pasutSpy = spy(pasut);
pasutSpy.findRevType(modifiedEntityTypeEntitys);
verify(pasutSpy, times(1)).findRevType((byte) 2);
}
@Test
public void testFindRevType_when_modifiedEntity_size_is_two_Second() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 2);
AuditService pasutSpy = spy(pasut);
pasutSpy.findRevType(modifiedEntityTypeEntitys);
verify(pasutSpy, times(1)).findRevType((byte) 2);
}
@Test
public void testFindRevType_when_modifiedEntity_size_is_three() {
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
modifiedEntityTypeEntitys.add(mock(ModifiedEntityTypeEntity.class));
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 0);
AuditService pasutSpy = spy(pasut);
pasutSpy.findRevType(modifiedEntityTypeEntitys);
verify(pasutSpy, times(1)).findRevType((byte) 0);
}
@Test
public void testFindLegalHistoryDetail() {
AuditService pasutSpy = spy(pasut);
Number n = mock(Number.class);
HistoryDto hd = mock(HistoryDto.class);
RevisionInfoEntity patientRevisionEntity = mock(RevisionInfoEntity.class);
List<ModifiedEntityTypeEntity> modifiedEntityTypeEntitys = new ArrayList<ModifiedEntityTypeEntity>();
ModifiedEntityTypeEntity mete = mock(ModifiedEntityTypeEntity.class);
modifiedEntityTypeEntitys.add(mete);
Patient patient = mock(Patient.class);
when(pasutSpy.makeHistoryDto()).thenReturn(hd);
when(patientRevisionEntityRepository.findOneById(n)).thenReturn(
patientRevisionEntity);
when(
modifiedEntityTypeEntityRepository
.findAllByRevision(any(RevisionInfoEntity.class)))
.thenReturn(modifiedEntityTypeEntitys);
when(patientRevisionEntity.getUsername()).thenReturn("username");
when(patientRepository.findByUsername(anyString())).thenReturn(patient);
when(patient.getLastName()).thenReturn("LastName");
when(patient.getFirstName()).thenReturn("FirstName");
when(patientRevisionEntity.getTimestamp()).thenReturn((long) 1);
when(modifiedEntityTypeEntitys.get(0).getRevisionType()).thenReturn(
(byte) 1);
pasutSpy.findLegalHistoryDetail(n);
verify(pasutSpy, times(1)).findRevType(anyByte());
verify(hd, times(1)).setRevisionid(anyLong());
verify(hd, times(1)).setChangedBy(anyString());
verify(hd, times(1)).setTimestamp(anyString());
verify(hd, times(1)).setRecType(anyString());
verify(hd, times(1)).setType(anyString());
}
@Test
public void testFindLegalHistoryDetails() {
List<Number> revisions = new ArrayList<Number>();
for (int i = 0; i < 3; i++) {
revisions.add(i);
}
AuditService pasutSpy = spy(pasut);
List<HistoryDto> historyDtosList = new ArrayList<HistoryDto>();
List<HistoryDto> historyDtosListSpy = spy(historyDtosList);
when(pasutSpy.makeHistoryDtos()).thenReturn(historyDtosListSpy);
pasutSpy.findHistoryDetails(revisions);
verify(historyDtosListSpy, times(3)).add(any(HistoryDto.class));
}
}