package gov.samhsa.acs.contexthandler.pg;
import static org.junit.Assert.assertEquals;
import gov.samhsa.acs.contexthandler.ContextHandler;
import gov.samhsa.acs.contexthandler.PolicyDecisionPoint;
import gov.samhsa.acs.contexthandler.pg.RequestGenerator;
import gov.va.ehtac.ds4p.ws.EnforcePolicy;
import gov.va.ehtac.ds4p.ws.EnforcePolicyResponse.Return;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
// TODO: These integration tests are written to test the manual context handler mapping for demo purposes
public class ContextHandlerImplIT {
private static final Logger LOGGER = LoggerFactory.getLogger(ContextHandlerImplIT.class);
private final String PERMIT = "Permit";
private final String DENY = "Deny";
private final String NOT_APPLICABLE = "Not_applicable";
private ContextHandler contextHandler;
private PolicyDecisionPoint policyDecisionPoint;
private RequestGenerator requestGenerator;
private String patientId;
private boolean packageAsXdm;
private String senderEmailAddress;
private String recipientEmailAddres;
// subject parameter config
private String subjectPurposeOfUse;
private String subjectLocality;
private String organization;
private String organizationId;
// resource parameter config
private String resourceName;
private String resourceType;
private String resourceAction;
//
// @Before
// public void setUp() throws Exception {
// this.requestGenerator = new RequestGenerator();
// ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// this.policyDecisionPoint=(PolicyDecisionPointImpl) context.getBean("policyDecisionPoint");
// contextHandler = new ContextHandlerImpl(policyDecisionPoint, requestGenerator);
// }
//
// public EnforcePolicy.Xspasubject setXspaSubject(
// String recipientEmailAddress, String messageId) {
// EnforcePolicy.Xspasubject xspasubject = new EnforcePolicy.Xspasubject();
// xspasubject.setSubjectPurposeOfUse(subjectPurposeOfUse);
// xspasubject.setSubjectLocality(subjectLocality);
// xspasubject.setSubjectEmailAddress(recipientEmailAddres);
// xspasubject.setSubjectId(recipientEmailAddres);
// xspasubject.setOrganization(organization);
// xspasubject.setOrganizationId(organizationId);
// xspasubject.setMessageId(messageId);
// return xspasubject;
// }
// public EnforcePolicy.Xsparesource setXspaResource(String patientId) {
// EnforcePolicy.Xsparesource xsparesource = new EnforcePolicy.Xsparesource();
// xsparesource.setResourceId(patientId);
// xsparesource.setResourceName(resourceName);
// xsparesource.setResourceType(resourceType);
// xsparesource.setResourceAction(resourceAction);
// return xsparesource;
// }
//
// @After
// public void tearDown() throws Exception {
// }
//
// // TODO: This integration test is written to test the manual context handler mapping for demo purposes
// @Test
// public final void testEnforcePolicyXspasubjectXsparesource_Joel() {
//
// // Arrange
// patientId = "PUI100010060001";
// packageAsXdm = true;
// senderEmailAddress = "leo.smith@direct.obhita-stage.org";
// recipientEmailAddres = "joel_amoussou@direct.healthvault-stage.com";
//
// // subject parameter config
// subjectPurposeOfUse ="TREAT";
// subjectLocality ="2.16.840.1.113883.3.467";
// organization ="SAMHSA";
// organizationId ="FEiSystems";
//
// // resource parameter config
// resourceName = "NwHINDirectSend";
// resourceType = "C32";
// resourceAction = "Execute";
//
// EnforcePolicy.Xspasubject xspasubject = setXspaSubject(this.recipientEmailAddres, UUID.randomUUID().toString());
// EnforcePolicy.Xsparesource xsparesource = setXspaResource(this.patientId);
//
// // Act
// Return result = contextHandler.enforcePolicy(xspasubject, xsparesource);
// LOGGER.debug(result.getPdpDecision());
// if(result.getPdpObligation() != null)
// {
// for(String s: result.getPdpObligation())
// {
// LOGGER.debug("obligation: " + s);
// }
// }
//
// // Assert
// assertEquals(PERMIT, result.getPdpDecision());
//
// }
//
// // TODO: This integration test is written to test the manual context handler mapping for demo purposes
// @Test
// public final void testEnforcePolicyXspasubjectXsparesource_Tao() {
//
// // Arrange
// patientId = "PUI100010060001";
// packageAsXdm = true;
// senderEmailAddress = "leo.smith@direct.obhita-stage.org";
// recipientEmailAddres = "Tao.Lin@direct.healthvault-stage.com";
//
// // subject parameter config
// subjectPurposeOfUse ="TREAT";
// subjectLocality ="2.16.840.1.113883.3.467";
// organization ="SAMHSA";
// organizationId ="FEiSystems";
//
// // resource parameter config
// resourceName = "NwHINDirectSend";
// resourceType = "C32";
// resourceAction = "Execute";
//
// EnforcePolicy.Xspasubject xspasubject = setXspaSubject(this.recipientEmailAddres, UUID.randomUUID().toString());
// EnforcePolicy.Xsparesource xsparesource = setXspaResource(this.patientId);
//
// // Act
// Return result = contextHandler.enforcePolicy(xspasubject, xsparesource);
// LOGGER.debug(result.getPdpDecision());
// if(result.getPdpObligation() != null)
// {
// for(String s: result.getPdpObligation())
// {
// LOGGER.debug("obligation: " + s);
// }
// }
//
// // Assert
// assertEquals(PERMIT, result.getPdpDecision());
//
// }
//
// // TODO: This integration test is written to test the manual context handler mapping for demo purposes
// @Test
// public final void testEnforcePolicyXspasubjectXsparesource_DenyByRecEmail() {
//
// // Arrange
// patientId = "PUI100010060001";
// packageAsXdm = true;
// senderEmailAddress = "leo.smith@direct.obhita-stage.org";
// recipientEmailAddres = "wrong@emailaddress.com";
//
// // subject parameter config
// subjectPurposeOfUse ="TREAT";
// subjectLocality ="2.16.840.1.113883.3.467";
// organization ="SAMHSA";
// organizationId ="FEiSystems";
//
// // resource parameter config
// resourceName = "NwHINDirectSend";
// resourceType = "C32";
// resourceAction = "Execute";
//
// EnforcePolicy.Xspasubject xspasubject = setXspaSubject(this.recipientEmailAddres, UUID.randomUUID().toString());
// EnforcePolicy.Xsparesource xsparesource = setXspaResource(this.patientId);
//
// // Act
// Return result = contextHandler.enforcePolicy(xspasubject, xsparesource);
// LOGGER.debug(result.getPdpDecision());
// if(result.getPdpObligation() != null)
// {
// for(String s: result.getPdpObligation())
// {
// LOGGER.debug("obligation: " + s);
// }
// }
//
// // Assert
// assertEquals(DENY, result.getPdpDecision());
//
// }
//
// // TODO: This integration test is written to test the manual context handler mapping for demo purposes
// @Test
// public final void testEnforcePolicyXspasubjectXsparesource_DenyByPatientId() {
//
// // Arrange
// patientId = "XXXXXXXXXXXXX";
// packageAsXdm = true;
// senderEmailAddress = "leo.smith@direct.obhita-stage.org";
// recipientEmailAddres = "Tao.Lin@direct.healthvault-stage.com";
//
// // subject parameter config
// subjectPurposeOfUse ="TREAT";
// subjectLocality ="2.16.840.1.113883.3.467";
// organization ="SAMHSA";
// organizationId ="FEiSystems";
//
// // resource parameter config
// resourceName = "NwHINDirectSend";
// resourceType = "C32";
// resourceAction = "Execute";
//
// EnforcePolicy.Xspasubject xspasubject = setXspaSubject(this.recipientEmailAddres, UUID.randomUUID().toString());
// EnforcePolicy.Xsparesource xsparesource = setXspaResource(this.patientId);
//
// // Act
// Return result = contextHandler.enforcePolicy(xspasubject, xsparesource);
// LOGGER.debug(result.getPdpDecision());
// if(result.getPdpObligation() != null)
// {
// for(String s: result.getPdpObligation())
// {
// LOGGER.debug("obligation: " + s);
// }
// }
//
// // Assert
// assertEquals(NOT_APPLICABLE, result.getPdpDecision());
//
// }
//
// // TODO: This integration test is written to test the manual context handler mapping for demo purposes
// @Test
// public final void testEnforcePolicyXspasubjectXsparesource_DifferentSenderEmail() {
//
// // Arrange
// patientId = "PUI100010060001";
// packageAsXdm = true;
// senderEmailAddress = "wrong@emailaddress.com";
// recipientEmailAddres = "Tao.Lin@direct.healthvault-stage.com";
//
// // subject parameter config
// subjectPurposeOfUse ="TREAT";
// subjectLocality ="2.16.840.1.113883.3.467";
// organization ="SAMHSA";
// organizationId ="FEiSystems";
//
// // resource parameter config
// resourceName = "NwHINDirectSend";
// resourceType = "C32";
// resourceAction = "Execute";
//
// EnforcePolicy.Xspasubject xspasubject = setXspaSubject(this.recipientEmailAddres, UUID.randomUUID().toString());
// EnforcePolicy.Xsparesource xsparesource = setXspaResource(this.patientId);
//
// // Act
// Return result = contextHandler.enforcePolicy(xspasubject, xsparesource);
// LOGGER.debug(result.getPdpDecision());
// if(result.getPdpObligation() != null)
// {
// for(String s: result.getPdpObligation())
// {
// LOGGER.debug("obligation: " + s);
// }
// }
//
// // Assert
// assertEquals(PERMIT, result.getPdpDecision());
//
// }
//
// // TODO: This integration test is written to test the manual context handler mapping for demo purposes
// @Test
// public final void testEnforcePolicyXspasubjectXsparesource_DifferentPurposeOfUse() {
//
// // Arrange
// patientId = "PUI100010060001";
// packageAsXdm = true;
// senderEmailAddress = "leo.smith@direct.obhita-stage.org";
// recipientEmailAddres = "Tao.Lin@direct.healthvault-stage.com";
//
// // subject parameter config
// subjectPurposeOfUse ="MARKT";
// subjectLocality ="2.16.840.1.113883.3.467";
// organization ="SAMHSA";
// organizationId ="FEiSystems";
//
// // resource parameter config
// resourceName = "NwHINDirectSend";
// resourceType = "C32";
// resourceAction = "Execute";
//
// EnforcePolicy.Xspasubject xspasubject = setXspaSubject(this.recipientEmailAddres, UUID.randomUUID().toString());
// EnforcePolicy.Xsparesource xsparesource = setXspaResource(this.patientId);
//
// // Act
// Return result = contextHandler.enforcePolicy(xspasubject, xsparesource);
// LOGGER.debug(result.getPdpDecision());
// if(result.getPdpObligation() != null)
// {
// for(String s: result.getPdpObligation())
// {
// LOGGER.debug("obligation: " + s);
// }
// }
//
// // Assert
// assertEquals(PERMIT, result.getPdpDecision());
//
// }
//
}