package org.openmrs.module.reporting.cohort.definition.evaluator;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openmrs.Location;
import org.openmrs.PatientIdentifierType;
import org.openmrs.api.context.Context;
import org.openmrs.module.reporting.cohort.EvaluatedCohort;
import org.openmrs.module.reporting.cohort.definition.CohortDefinition;
import org.openmrs.module.reporting.cohort.definition.PatientIdentifierCohortDefinition;
import org.openmrs.module.reporting.cohort.definition.service.CohortDefinitionService;
import org.openmrs.module.reporting.common.TestUtil;
import org.openmrs.module.reporting.evaluation.EvaluationContext;
import org.openmrs.test.BaseContextSensitiveTest;
import org.openmrs.test.BaseModuleContextSensitiveTest;
/**
* Test for the {@link PatientIdentifierCohortDefinitionEvaluator}
*/
public class PatientIdentifierCohortDefinitionEvaluatorTest extends BaseModuleContextSensitiveTest {
protected static final String XML_DATASET_PATH = "org/openmrs/module/reporting/include/";
protected static final String XML_REPORT_TEST_DATASET = "ReportTestDataset";
/**
* Run this before each unit test in this class. The "@Before" method in
* {@link BaseContextSensitiveTest} is run right before this method.
*
* @throws Exception
*/
@Before
public void setup() throws Exception {
executeDataSet(XML_DATASET_PATH + new TestUtil().getTestDatasetFilename(XML_REPORT_TEST_DATASET));
}
/**
* @see PatientIdentifierCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)
* @verifies return patients who have identifiers of the passed types
*/
@Test
public void evaluate_shouldReturnPatientsWhoHaveIdentifiersOfThePassedTypes() throws Exception {
{
PatientIdentifierCohortDefinition picd = new PatientIdentifierCohortDefinition();
picd.addTypeToMatch(new PatientIdentifierType(2));
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(8, c.getSize());
}
{
PatientIdentifierCohortDefinition picd = new PatientIdentifierCohortDefinition();
picd.addTypeToMatch(new PatientIdentifierType(1));
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(3, c.getSize());
}
{
PatientIdentifierCohortDefinition picd = new PatientIdentifierCohortDefinition();
picd.addTypeToMatch(new PatientIdentifierType(1));
picd.addTypeToMatch(new PatientIdentifierType(2));
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(10, c.getSize());
}
}
/**
* @see PatientIdentifierCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)
* @verifies return patients who have identifiers matching the passed locations
*/
@Test
public void evaluate_shouldReturnPatientsWhoHaveIdentifiersMatchingThePassedLocations() throws Exception {
PatientIdentifierCohortDefinition picd = new PatientIdentifierCohortDefinition();
picd.addTypeToMatch(new PatientIdentifierType(2));
Assert.assertEquals(8, Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext()).size());
picd.addLocationToMatch(new Location(3));
Assert.assertEquals(1, Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext()).size());
}
/**
* @see PatientIdentifierCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)
* @verifies return patients who have identifiers matching the passed text
*/
@Test
public void evaluate_shouldReturnPatientsWhoHaveIdentifiersMatchingThePassedText() throws Exception {
PatientIdentifierCohortDefinition picd = new PatientIdentifierCohortDefinition();
{
picd.setTextToMatch("TEST");
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(0, c.size());
}
{
picd.setTextToMatch("TEST901");
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(1, c.size());
}
{
picd.setTextToMatch("TEST%");
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(1, c.size());
Assert.assertTrue(c.contains(20));
}
{
picd.setTextToMatch("%TEST");
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(1, c.size());
Assert.assertTrue(c.contains(21));
}
{
picd.setTextToMatch("%TEST%");
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(2, c.size());
}
}
/**
* @see PatientIdentifierCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)
* @verifies return patients who have identifiers matching the passed regular expression
*/
@Test
public void evaluate_shouldReturnPatientsWhoHaveIdentifiersMatchingThePassedRegularExpression() throws Exception {
PatientIdentifierCohortDefinition picd = new PatientIdentifierCohortDefinition();
picd.setRegexToMatch(".*-.*"); // Match any identifier that contains a dash
EvaluatedCohort c = Context.getService(CohortDefinitionService.class).evaluate(picd, new EvaluationContext());
Assert.assertEquals(4, c.size());
}
}