/******************************************************************************* * Open Behavioral Health Information Technology Architecture (OBHITA.org) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the <organization> nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ package gov.samhsa.consent; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import gov.samhsa.acs.common.tool.XmlTransformer; import java.util.Optional; 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; @RunWith(MockitoJUnitRunner.class) public class ConsentBuilderImplTest { @InjectMocks ConsentBuilderImpl sut; @Mock ConsentDtoFactory consentDtoFactoryMock; @Mock XmlTransformer xmlTransformerMock; @Mock XacmlXslUrlProvider xacmlXslUrlProvider; @Rule public ExpectedException thrown = ExpectedException.none(); @SuppressWarnings("unchecked") @Test public void testBuildConsent2Cdar2() throws ConsentGenException { // Arrange final long consentId = 1; final ConsentDto consentDtoMock = mock(ConsentDto.class); final String cdar2XslUrlStrMock = "cdar2XslUrlStrMock"; when(consentDtoFactoryMock.createConsentDto(anyLong())).thenReturn( consentDtoMock); final String cdar2Mock = "cdar2Mock"; when(xacmlXslUrlProvider.getUrl(XslResource.CDAR2XSLNAME)).thenReturn( cdar2XslUrlStrMock); when( xmlTransformerMock.transform(eq(consentDtoMock), eq(cdar2XslUrlStrMock), isA(Optional.class), isA(Optional.class))).thenReturn(cdar2Mock); // Act final String cdar2 = sut.buildConsent2Cdar2(consentId); // Assert assertEquals(cdar2Mock, cdar2); } @SuppressWarnings("unchecked") @Test public void testBuildConsent2Cdar2_ConsentGenException() throws ConsentGenException { // Arrange thrown.expect(ConsentGenException.class); final long consentId = 1; final String cdar2XslUrlStrMock = "cdar2XslUrlStrMock"; final ConsentDto consentDtoMock = mock(ConsentDto.class); when(consentDtoFactoryMock.createConsentDto(anyLong())).thenReturn( consentDtoMock); when(xacmlXslUrlProvider.getUrl(XslResource.CDAR2XSLNAME)).thenReturn( cdar2XslUrlStrMock); when( xmlTransformerMock.transform(eq(consentDtoMock), eq(cdar2XslUrlStrMock), isA(Optional.class), isA(Optional.class))).thenThrow( new RuntimeException("Error in saxon transform")); // Act sut.buildConsent2Cdar2(consentId); // Assert } @SuppressWarnings("unchecked") @Test public void testBuildConsent2Xacml() throws ConsentGenException { // Arrange final String mrnMock = "mrnMock"; final Long consentId = new Long(1); final ConsentDto consentDtoMock = mock(ConsentDto.class); final PatientDto patientDtoMock = mock(PatientDto.class); when(consentDtoFactoryMock.createConsentDto(consentId)).thenReturn( consentDtoMock); when(consentDtoMock.getPatientDto()).thenReturn(patientDtoMock); when(patientDtoMock.getMedicalRecordNumber()).thenReturn(mrnMock); final String xacmlMock = "xacml"; final String xacmlXslUrl = "xacmlXslUrl"; when(xacmlXslUrlProvider.getUrl(XslResource.XACMLXSLNAME)).thenReturn( xacmlXslUrl); when( xmlTransformerMock.transform(eq(consentDtoMock), eq(xacmlXslUrl), isA(Optional.class), isA(Optional.class))).thenReturn(xacmlMock); // Act final String xacml = sut.buildConsent2Xacml(consentId); // Assert assertEquals(xacmlMock, xacml); } @SuppressWarnings("unchecked") @Test public void testBuildConsent2Xacml_ConsentGenException() throws ConsentGenException { // Arrange final String mrnMock = "mrnMock"; thrown.expect(ConsentGenException.class); final Long consentId = new Long(1); final ConsentDto consentDtoMock = mock(ConsentDto.class); final PatientDto patientDtoMock = mock(PatientDto.class); when(consentDtoMock.getPatientDto()).thenReturn(patientDtoMock); when(patientDtoMock.getMedicalRecordNumber()).thenReturn(mrnMock); when(consentDtoFactoryMock.createConsentDto(consentId)).thenReturn( consentDtoMock); final String xacmlXslUrlMock = "xacmlXslUrlMock"; when(xacmlXslUrlProvider.getUrl(XslResource.XACMLXSLNAME)).thenReturn( xacmlXslUrlMock); when( xmlTransformerMock.transform(eq(consentDtoMock), eq(xacmlXslUrlMock), isA(Optional.class), isA(Optional.class))).thenThrow( new RuntimeException("Error in saxon transform")); // Act sut.buildConsent2Xacml(consentId); // Assert } }