package gov.samhsa.acs.brms;
import gov.samhsa.acs.brms.RuleExecutionServiceImpl;
import gov.samhsa.acs.brms.guvnor.GuvnorServiceImpl;
import gov.samhsa.acs.common.tool.SimpleMarshallerImpl;
import gov.samhsa.consent2share.schema.ruleexecutionservice.AssertAndExecuteClinicalFactsResponse;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Integration test for RuleExecution and Guvnor services.
*/
public class RuleExecutionServiceImplIT {
/** The sut. */
private RuleExecutionServiceImpl sut;
/** The clinical facts. */
private String clinicalFacts;
private String endpointAddressGuvnorService;
/** The Constant LOGGER. */
private static final Logger LOGGER = LoggerFactory.getLogger(RuleExecutionServiceImplIT.class);
/**
* Set up.
*/
@Before
public void setUp() {
endpointAddressGuvnorService = "http://localhost:8080/guvnor-5.5.0.Final-tomcat-6.0/rest/packages/AnnotationRules/source";
sut = new RuleExecutionServiceImpl(new GuvnorServiceImpl(
endpointAddressGuvnorService,"admin", "admin"), new SimpleMarshallerImpl());
}
/**
* Test assert and execute clinical facts_ returns_ execution response.
*/
// Integration test
@Test
public void testAssertAndExecuteClinicalFacts_Returns_ExecutionResponse() {
clinicalFacts = "<FactModel><xacmlResult><pdpDecision>Permit</pdpDecision><purposeOfUse>TREAT</purposeOfUse><messageId>71fe0397-3684-4acb-9811-6416c5c77b55</messageId><homeCommunityId>2.16.840.1.113883.3.467</homeCommunityId></xacmlResult>"
+ "<ClinicalFacts><ClinicalFact><code>66214007</code><displayName>Substance abuse (disorder)</displayName><codeSystem>2.16.840.1.113883.6.96</codeSystem><codeSystemName/><c32SectionTitle>Problems</c32SectionTitle><c32SectionLoincCode>11450-4</c32SectionLoincCode><observationId>d17e216</observationId></ClinicalFact><ClinicalFact><code>DOCUMENT</code></ClinicalFact></ClinicalFacts></FactModel>";
AssertAndExecuteClinicalFactsResponse response = sut
.assertAndExecuteClinicalFacts(clinicalFacts);
String ruleExecutionContainerXML = response
.getRuleExecutionResponseContainer();
LOGGER.debug("\n\n" + ruleExecutionContainerXML);
Assert.assertNotNull(ruleExecutionContainerXML);
}
/**
* Test Clinical Rule Mental health problem (finding) REDACT rule
*/
// Integration test
@Test
public void testRule_clinicalRuleMentalHealthProblemREDACT() {
clinicalFacts = "<FactModel><xacmlResult><pdpDecision>Permit</pdpDecision><purposeOfUse>TREAT</purposeOfUse><messageId>71fe0397-3684-4acb-9811-6416c5c77b55</messageId><homeCommunityId>2.16.840.1.113883.3.467</homeCommunityId></xacmlResult><ClinicalFacts><ClinicalFact><code>413307004</code><displayName>Mental health problem (finding)</displayName><codeSystem>2.16.840.1.113883.6.96</codeSystem><codeSystemName/><c32SectionTitle>Problems</c32SectionTitle><c32SectionLoincCode>11450-4</c32SectionLoincCode><observationId>d17e216</observationId></ClinicalFact></ClinicalFacts></FactModel>";
AssertAndExecuteClinicalFactsResponse response = sut
.assertAndExecuteClinicalFacts(clinicalFacts);
String ruleExecutionContainerXML = response
.getRuleExecutionResponseContainer();
LOGGER.debug("\n\n" + ruleExecutionContainerXML);
Assert.assertNotNull(ruleExecutionContainerXML);
// Assertions below need a particular rule in Gunvor
Assert.assertTrue("Sensitivity isn't PSY", ruleExecutionContainerXML
.contains("<sensitivity>PSY</sensitivity>"));
Assert.assertTrue("Confidentiality isn't R", ruleExecutionContainerXML
.contains("<impliedConfSection>R</impliedConfSection>"));
Assert.assertTrue("US Privacy Law isn't 42CFRPart2",
ruleExecutionContainerXML
.contains("<USPrivacyLaw>42CFRPart2</USPrivacyLaw>"));
Assert.assertTrue(
"Document Refrain Policy isn't NODSCLCD",
ruleExecutionContainerXML
.contains("<documentRefrainPolicy>NODSCLCD</documentRefrainPolicy>"));
Assert.assertTrue(
"Document Obligation Policy isn't ENCRYPT",
ruleExecutionContainerXML
.contains("<documentObligationPolicy>ENCRYPT</documentObligationPolicy>"));
Assert.assertTrue("Clinical fact returned with a different code",
ruleExecutionContainerXML.contains("<code>413307004</code>"));
}
}