package gov.samhsa.acs.documentsegmentation.tools; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import gov.samhsa.acs.brms.domain.XacmlResult; import gov.samhsa.acs.common.tool.DocumentAccessorImpl; import gov.samhsa.acs.common.tool.DocumentXmlConverterImpl; import gov.samhsa.acs.common.tool.FileReaderImpl; import gov.samhsa.acs.common.util.EncryptTool; import java.security.Key; import org.apache.axiom.attachments.ByteArrayDataSource; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; public class DocumentEditorImplTest { private static FileReaderImpl fileReader; private static DocumentXmlConverterImpl documentXmlConverter; private static DocumentAccessorImpl documentAccessor; private static MetadataGeneratorImpl metadataGeneratorMock; private static XacmlResult xacmlResultMock; private static String c32; private static Document c32Document; private static String xPathDate; private static String ruleExecutionResponseContainer; private static final String EXPECTED_DATE = "20101026130945"; private static DocumentEditorImpl documentEditor; private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Test public void testGetElement() { try { // Act final String dateValue = documentAccessor.getElement(c32Document, xPathDate).getAttribute("value"); // Assert assertEquals(EXPECTED_DATE, dateValue); } catch (final Exception e) { logger.error(e.getMessage(), e); } } @Test public void testSetDocumentCreationDate() { // Arrange logger.debug(c32); Element e1 = null; Element e2 = null; try { // Act final Document c32DocumentTemp = documentXmlConverter .loadDocument(documentEditor.setDocumentCreationDate(c32)); e1 = documentAccessor.getElement(c32Document, xPathDate); e2 = documentAccessor.getElement(c32DocumentTemp, xPathDate); logger.debug(e1.getAttribute("value")); logger.debug(e2.getAttribute("value")); } catch (final Exception e) { logger.error(e.getMessage(), e); } // Assert assertNotNull(e1); assertNotNull(e2); assertNotEquals(e1.getAttribute("value"), e2.getAttribute("value")); } @Test public void testSetDocumentPayloadRawData_PackageAsXdmFalse() { // Arrange final boolean packageAsXdm = false; testSetDocumentPayloadRawData(packageAsXdm); } @Test public void testSetDocumentPayloadRawData_PackageAsXdmTrue() { // Arrange final boolean packageAsXdm = true; testSetDocumentPayloadRawData(packageAsXdm); } private void testSetDocumentPayloadRawData(boolean packageAsXdm) { // Arrange when(xacmlResultMock.getHomeCommunityId()).thenReturn( "2.16.840.1.113883.3.467"); byte[] encryptionKeyBytes = null; byte[] maskingKeyBytes = null; ByteArrayDataSource rawData = null; try { final Key deSedeEncryptKey = EncryptTool.generateKeyEncryptionKey(); final Key deSedeMaskKey = EncryptTool.generateKeyEncryptionKey(); encryptionKeyBytes = deSedeEncryptKey.getEncoded(); maskingKeyBytes = deSedeMaskKey.getEncoded(); // Act rawData = documentEditor.setDocumentPayloadRawData(c32, packageAsXdm, "sender@email.com", "recepient@email.com", xacmlResultMock, ruleExecutionResponseContainer, maskingKeyBytes, encryptionKeyBytes); logger.debug(rawData.toString()); logger.debug(rawData.getContentType()); logger.debug(rawData.getName()); logger.debug(rawData.getInputStream().toString()); assertTrue(rawData.getInputStream().toString() .startsWith("java.io.ByteArrayInputStream@")); } catch (final Exception e) { logger.error(e.getMessage(), e); } // Assert assertNotNull(rawData); assertTrue(rawData.toString().startsWith( "org.apache.axiom.attachments.ByteArrayDataSource@")); assertEquals("application/octet-stream", rawData.getContentType()); } @BeforeClass public static void setUp() throws Exception { fileReader = new FileReaderImpl(); documentXmlConverter = new DocumentXmlConverterImpl(); metadataGeneratorMock = mock(MetadataGeneratorImpl.class); documentAccessor = new DocumentAccessorImpl(); when( metadataGeneratorMock.generateMetadataXml(anyString(), anyString(), anyString(), anyString(), anyString())) .thenReturn(fileReader.readFile("testMetadata.xml")); documentEditor = new DocumentEditorImpl(metadataGeneratorMock, fileReader, documentXmlConverter, documentAccessor); c32 = fileReader.readFile("sampleC32/c32.xml"); c32Document = documentXmlConverter.loadDocument(c32); xPathDate = "//hl7:effectiveTime"; ruleExecutionResponseContainer = "<ruleExecutionContainer><executionResponseList><executionResponse><c32SectionLoincCode>11450-4</c32SectionLoincCode><c32SectionTitle>Problems</c32SectionTitle><code>66214007</code><codeSystemName>SNOMED CT</codeSystemName><displayName>Substance Abuse Disorder</displayName><documentObligationPolicy>ENCRYPT</documentObligationPolicy><documentRefrainPolicy>NORDSLCD</documentRefrainPolicy><impliedConfSection>R</impliedConfSection><itemAction>REDACT</itemAction><observationId>e11275e7-67ae-11db-bd13-0800200c9a66b827vs52h7</observationId><sensitivity>ETH</sensitivity><USPrivacyLaw>42CFRPart2</USPrivacyLaw></executionResponse><executionResponse><c32SectionLoincCode>11450-4</c32SectionLoincCode><c32SectionTitle>Problems</c32SectionTitle><code>111880001</code><codeSystemName>SNOMED CT</codeSystemName><displayName>Acute HIV</displayName><documentObligationPolicy>ENCRYPT</documentObligationPolicy><documentRefrainPolicy>NORDSLCD</documentRefrainPolicy><impliedConfSection>R</impliedConfSection><itemAction>MASK</itemAction><observationId>d11275e7-67ae-11db-bd13-0800200c9a66</observationId><sensitivity>HIV</sensitivity><USPrivacyLaw>42CFRPart2</USPrivacyLaw></executionResponse></executionResponseList></ruleExecutionContainer>"; xacmlResultMock = mock(XacmlResult.class); } }