package gov.samhsa.acs.documentsegmentation.tools; import gov.samhsa.acs.common.exception.DS4PException; import gov.samhsa.acs.common.tool.SimpleMarshallerImpl; import gov.samhsa.acs.common.tool.XmlTransformer; import gov.samhsa.acs.common.tool.XmlTransformerImpl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.util.UUID; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AdditonalMetadataGeneratorForProcessedC32ImplTest { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @After public void tearDown() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { final XmlTransformer xmlTransformer = new XmlTransformerImpl( new SimpleMarshallerImpl()); final AdditionalMetadataGeneratorForSegmentedClinicalDocumentImpl additionalMetadataGeneratorForProcessedC32Impl = new AdditionalMetadataGeneratorForSegmentedClinicalDocumentImpl( xmlTransformer); final Field field = additionalMetadataGeneratorForProcessedC32Impl .getClass() .getDeclaredField( "AdditonalMetadataStylesheetForProcessedC32_Xsl_File_Name"); field.setAccessible(true); field.set(additionalMetadataGeneratorForProcessedC32Impl, "AdditonalMetadataStylesheetForProcessedC32.xsl"); } @Test public void testGenerateMetadataXml() throws Exception { // Arrange final XmlTransformer xmlTransformer = new XmlTransformerImpl( new SimpleMarshallerImpl()); final String ruleExecutionResponseContainer = readStringFromFile("ruleExecutionResponseContainer.xml"); final String taggedC32Doc = readStringFromFile("tagged_C32.xml"); final AdditionalMetadataGeneratorForSegmentedClinicalDocumentImpl additionalMetadataGeneratorForProcessedC32Impl = new AdditionalMetadataGeneratorForSegmentedClinicalDocumentImpl( xmlTransformer); final String senderEmailAddress = "sender@sender.com"; final String recipientEmailAddress = "receiver@receiver.com"; final String purposeOfUse = "TREAT"; final String xdsDocumentEntryUniqueId = "123"; // Act final String result = additionalMetadataGeneratorForProcessedC32Impl .generateMetadataXml(UUID.randomUUID().toString(), taggedC32Doc, ruleExecutionResponseContainer, senderEmailAddress, recipientEmailAddress, purposeOfUse, xdsDocumentEntryUniqueId); // Assert final String expectedResult = readStringFromFile("additionalMetadataGeneratedFromRuleExecutionResponseContainer.xml"); Assert.assertNotNull(result); // assertTrue(result.trim().equals(expectedResult.trim())); } @Test(expected = DS4PException.class) public void testGenerateMetadataXml_Throws_DS4PException_Having_TransformerConfigurationException() throws Exception { // Arrange final XmlTransformer xmlTransformer = new XmlTransformerImpl( new SimpleMarshallerImpl()); final String ruleExecutionResponseContainer = readStringFromFile("ruleExecutionResponseContainer.xml"); final String taggedC32Doc = readStringFromFile("tagged_C32.xml"); final AdditionalMetadataGeneratorForSegmentedClinicalDocumentImpl additionalMetadataGeneratorForProcessedC32Impl = new AdditionalMetadataGeneratorForSegmentedClinicalDocumentImpl( xmlTransformer); final String senderEmailAddress = "sender@sender.com"; final String recipientEmailAddress = "receiver@receiver.com"; final String purposeOfUse = "TREAT"; final String xdsDocumentEntryUniqueId = "123"; // Try to use a wrong xsl file final Field field = additionalMetadataGeneratorForProcessedC32Impl .getClass() .getDeclaredField( "AdditonalMetadataStylesheetForProcessedC32_Xsl_File_Name"); field.setAccessible(true); // Field modifiersField = Field.class.getDeclaredField( "modifiers" ); // modifiersField.setAccessible( true ); // modifiersField.setInt( field, field.getModifiers() & ~Modifier.FINAL // ); field.set(additionalMetadataGeneratorForProcessedC32Impl, "WRONG_FILE_NAME.XSL"); // Act @SuppressWarnings("unused") final String result = additionalMetadataGeneratorForProcessedC32Impl .generateMetadataXml(UUID.randomUUID().toString(), taggedC32Doc, ruleExecutionResponseContainer, senderEmailAddress, recipientEmailAddress, purposeOfUse, xdsDocumentEntryUniqueId); // Assert // expect exception } private String readStringFromFile(String fileName) { final InputStream is = Thread.currentThread().getContextClassLoader() .getResourceAsStream(fileName); final BufferedReader br = new BufferedReader(new InputStreamReader(is)); final StringBuilder resultStringBuilder = new StringBuilder(); try { String line; while ((line = br.readLine()) != null) { resultStringBuilder.append(line); resultStringBuilder.append("\n"); } br.close(); is.close(); } catch (final IOException e) { logger.error(e.getMessage(), e); } final String result = resultStringBuilder.toString(); return result; } }