package gov.samhsa.acs.documentsegmentation.tools; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import gov.samhsa.acs.brms.domain.Confidentiality; import gov.samhsa.acs.brms.domain.ObligationPolicyDocument; import gov.samhsa.acs.brms.domain.RefrainPolicy; import gov.samhsa.acs.brms.domain.RuleExecutionContainer; import gov.samhsa.acs.brms.domain.RuleExecutionResponse; import gov.samhsa.acs.brms.domain.Sensitivity; import gov.samhsa.acs.brms.domain.UsPrivacyLaw; import gov.samhsa.acs.brms.domain.XacmlResult; import gov.samhsa.acs.common.exception.DS4PException; import gov.samhsa.acs.common.tool.DocumentXmlConverterImpl; import gov.samhsa.acs.common.tool.FileReaderImpl; import gov.samhsa.acs.common.util.EncryptTool; import gov.samhsa.acs.documentsegmentation.tools.DocumentMaskerImpl; import java.util.LinkedList; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DocumentMaskerImplTest { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private static FileReaderImpl fileReader; private static DocumentXmlConverterImpl documentXmlConverter; private static XacmlResult xacmlResultMock; private static RuleExecutionContainer ruleExecutionContainer; private static String c32; private static DocumentMaskerImpl documentMasker; @BeforeClass public static void setUp() throws Exception { fileReader = new FileReaderImpl(); documentXmlConverter = new DocumentXmlConverterImpl(); documentMasker = new DocumentMaskerImpl(documentXmlConverter); c32 = fileReader.readFile("sampleC32/c32.xml"); ruleExecutionContainer = setRuleExecutionContainer(); xacmlResultMock = setMockXacmlResult(); } @Test public void testMaskElement() { logger.debug(c32); String s = null; try { // Act s = documentMasker.maskDocument(c32, EncryptTool.generateKeyEncryptionKey(), ruleExecutionContainer, xacmlResultMock); logger.debug(s); } catch (Exception e) { logger.error(e.getMessage(), e); } assertNotNull(s); // TODO might need better assertion for masking if the masking code is // activated (disabling redact-only comments) } @Test(expected = DS4PException.class) public void testMaskElement_Throws_DS4PException() throws Exception { // Empty xml file @SuppressWarnings("unused") String s = documentMasker.maskDocument("", EncryptTool.generateKeyEncryptionKey(), ruleExecutionContainer, xacmlResultMock); } private static RuleExecutionContainer setRuleExecutionContainer() { RuleExecutionContainer container = new RuleExecutionContainer(); RuleExecutionResponse r1 = new RuleExecutionResponse(); r1.setC32SectionLoincCode("11450-4"); r1.setC32SectionTitle("Problems"); r1.setCode("66214007"); r1.setCodeSystemName("SNOMED CT"); r1.setDisplayName("Substance Abuse Disorder"); r1.setDocumentObligationPolicy(ObligationPolicyDocument.ENCRYPT); r1.setDocumentRefrainPolicy(RefrainPolicy.NODSCLCD); r1.setImpliedConfSection(Confidentiality.R); r1.setItemAction("REDACT"); r1.setObservationId("e11275e7-67ae-11db-bd13-0800200c9a66b827vs52h7"); r1.setSensitivity(Sensitivity.ETH); r1.setUSPrivacyLaw(UsPrivacyLaw._42CFRPart2); RuleExecutionResponse r2 = new RuleExecutionResponse(); r2.setC32SectionLoincCode("11450-4"); r2.setC32SectionTitle("Problems"); r2.setCode("111880001"); r2.setCodeSystemName("SNOMED CT"); r2.setDisplayName("Acute HIV"); r2.setDocumentObligationPolicy(ObligationPolicyDocument.ENCRYPT); r2.setDocumentRefrainPolicy(RefrainPolicy.NODSCLCD); r2.setImpliedConfSection(Confidentiality.R); r2.setItemAction("MASK"); r2.setObservationId("d11275e7-67ae-11db-bd13-0800200c9a66"); r2.setSensitivity(Sensitivity.HIV); r2.setUSPrivacyLaw(UsPrivacyLaw._42CFRPart2); List<RuleExecutionResponse> list = new LinkedList<RuleExecutionResponse>(); list.add(r1); list.add(r2); container.setExecutionResponseList(list); return container; } private static XacmlResult setMockXacmlResult() { XacmlResult temp = mock(XacmlResult.class); List<String> obligations = new LinkedList<String>(); obligations.add("ETH"); obligations.add("HIV"); when(temp.getPdpObligations()).thenReturn(obligations); return temp; } }