package gov.samhsa.consent2share.si; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import gov.samhsa.acs.audit.AuditService; import gov.samhsa.acs.common.tool.DocumentXmlConverter; import gov.samhsa.acs.common.tool.SimpleMarshaller; //import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryResponse; import gov.samhsa.spirit.wsclient.adapter.SpiritAdapter; import gov.samhsa.spirit.wsclient.dto.EhrPatientClientListDto; import java.util.ArrayList; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; import com.spirit.ehr.ws.client.generated.DocumentClientDto; import com.spirit.ehr.ws.client.generated.EhrPatientClientDto; import com.spirit.ehr.ws.client.generated.EhrResponseDetail; import com.spirit.ehr.ws.client.generated.SourceSubmissionClientDto; import com.spirit.ehr.ws.client.generated.XdsSrcSubmitRsp; @RunWith(MockitoJUnitRunner.class) public class ConsentSignedMessageHandlerTest { // private static final String SUCCESS = // AbstractConsentMessageHandler.URN_RESPONSE_SUCCESS; // private static final String FAIL = "FAIL"; @Mock private ConsentGetter consentGetterMock; @Mock private DocumentXmlConverter documentXmlConverterMock; @Mock private AuditService auditServiceMock; @Mock private SimpleMarshaller marshallerMock; @Mock private SpiritAdapter spiritAdapter; @Mock private EndpointStopper endpointStopperMock; final String dataMock = "1"; final byte[] consentMock = new byte[1]; final byte[] signedConsentPdfMock = new byte[1]; final byte[] pdfConsentFromXacmlMock = new byte[1]; final byte[] pdfConsentToXacmlMock = new byte[1]; final String domainIdMock = "domainIdMock"; final String patientEidMock = "patientEidMock"; final String patientLocalIdMock = "patientLocalIdMock"; @Rule public ExpectedException thrown = ExpectedException.none(); @InjectMocks private ConsentSignedMessageHandler sut; @Test public void testHandleMessage_Successes_Given_XDS_Returns_Success_Response() throws Throwable { // Arrange ReflectionTestUtils.setField(sut, "domainId", domainIdMock); SignedConsentDto simpleConsentDtoMock = mock(SignedConsentDto.class); String xacmlPolicyIdMock = "xacmlPolicyIdMock"; when(simpleConsentDtoMock.getPatientMrn()).thenReturn( patientLocalIdMock); when(simpleConsentDtoMock.getXacmlCcdId()) .thenReturn(xacmlPolicyIdMock); when(simpleConsentDtoMock.getXacmlCcd()).thenReturn(consentMock); when(simpleConsentDtoMock.getXacmlPdfConsentFrom()).thenReturn( pdfConsentFromXacmlMock); when(simpleConsentDtoMock.getXacmlPdfConsentTo()).thenReturn( pdfConsentToXacmlMock); when(simpleConsentDtoMock.getXacmlCcd()).thenReturn(consentMock); when(simpleConsentDtoMock.getSignedPdfConsent()).thenReturn( signedConsentPdfMock); when(consentGetterMock.getSignedConsentDto(1)).thenReturn( simpleConsentDtoMock); when(spiritAdapter.login()).thenReturn("stateid123"); SourceSubmissionClientDto sourceSubmissionClientDto = mock(SourceSubmissionClientDto.class); when(spiritAdapter.generatePolicyMetadata(anyString())).thenReturn( sourceSubmissionClientDto); List<DocumentClientDto> documentClientDtolistmock = new ArrayList<DocumentClientDto>(); DocumentClientDto documentClientDtomock = mock(DocumentClientDto.class); documentClientDtolistmock.add(documentClientDtomock); when(sourceSubmissionClientDto.getDocuments()).thenReturn( documentClientDtolistmock); List<EhrPatientClientDto> patientClientDtoList = new ArrayList<EhrPatientClientDto>(); EhrPatientClientDto patientClientDtomock = mock(EhrPatientClientDto.class); patientClientDtoList.add(patientClientDtomock); EhrPatientClientListDto ehrPatientClientListDto = mock(EhrPatientClientListDto.class); when(ehrPatientClientListDto.getEhrPatientClientListDto()).thenReturn( patientClientDtoList); when(ehrPatientClientListDto.getStateId()).thenReturn("stateid123"); when(spiritAdapter.queryPatientsWithPids(anyString(), anyString())) .thenReturn(ehrPatientClientListDto); XdsSrcSubmitRsp responsemock = mock(XdsSrcSubmitRsp.class); EhrResponseDetail responseDetailMock = mock(EhrResponseDetail.class); List<String> listSuccess = new ArrayList<String>(); listSuccess.add("Success 1"); when(responsemock.getResponseDetail()).thenReturn(responseDetailMock); when(responseDetailMock.getListSuccess()).thenReturn(listSuccess); when( spiritAdapter.submitSignedConsent(consentMock, signedConsentPdfMock, pdfConsentFromXacmlMock, pdfConsentToXacmlMock, xacmlPolicyIdMock, patientLocalIdMock, "USA")).thenReturn(responsemock); // Act String response = sut.handleMessage(dataMock); // Assert assertEquals("Saved in XDS.b repository", response); verify(endpointStopperMock, times(1)).setCounter(0); } @SuppressWarnings("unchecked") @Test(expected = Throwable.class) public void testHandleMessage_Throws_Exception_Given_XDS_Returns_Fail_Response() throws Throwable { // Arrange ReflectionTestUtils.setField(sut, "domainId", domainIdMock); SignedConsentDto simpleConsentDtoMock = mock(SignedConsentDto.class); when(simpleConsentDtoMock.getPatientMrn()).thenReturn( patientLocalIdMock); when(simpleConsentDtoMock.getXacmlCcdId()).thenReturn("xacmlPolicyId"); when(simpleConsentDtoMock.getXacmlCcd()).thenReturn(consentMock); when(consentGetterMock.getSignedConsentDto(1)).thenReturn( simpleConsentDtoMock); when(spiritAdapter.login()).thenReturn("stateid123"); SourceSubmissionClientDto sourceSubmissionClientDto = mock(SourceSubmissionClientDto.class); when(spiritAdapter.generatePolicyMetadata(anyString())).thenReturn( sourceSubmissionClientDto); List<DocumentClientDto> documentClientDtolistmock = new ArrayList<DocumentClientDto>(); DocumentClientDto documentClientDtomock = mock(DocumentClientDto.class); documentClientDtolistmock.add(documentClientDtomock); when(sourceSubmissionClientDto.getDocuments()).thenReturn( documentClientDtolistmock); List<EhrPatientClientDto> patientClientDtoList = new ArrayList<EhrPatientClientDto>(); EhrPatientClientDto patientClientDtomock = mock(EhrPatientClientDto.class); patientClientDtoList.add(patientClientDtomock); EhrPatientClientListDto ehrPatientClientListDto = mock(EhrPatientClientListDto.class); when(ehrPatientClientListDto.getEhrPatientClientListDto()).thenReturn( patientClientDtoList); when(ehrPatientClientListDto.getStateId()).thenReturn("stateid123"); when(spiritAdapter.queryPatientsWithPids(anyString(), anyString())) .thenReturn(ehrPatientClientListDto); when( spiritAdapter.submitDocument(patientClientDtomock, sourceSubmissionClientDto, false, "stateid123")) .thenThrow(Throwable.class); sut.handleMessage(dataMock); } }