package org.openmrs.module.reporting.cohort.definition.evaluator; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openmrs.Cohort; import org.openmrs.Concept; import org.openmrs.PersonAttributeType; import org.openmrs.api.context.Context; import org.openmrs.module.reporting.cohort.definition.CohortDefinition; import org.openmrs.module.reporting.cohort.definition.PersonAttributeCohortDefinition; 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; import org.openmrs.test.Verifies; /** * Tests the PersonAttributeCohortDefinitionEvaluator */ public class PersonAttributeCohortDefinitionEvaluatorTest 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 {@link PersonAttributeCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)} */ @Test @Verifies(value = "should get patients having attributes with given attribute type and values", method = "evaluate(CohortDefinition,EvaluationContext)") public void evaluate_shouldGetPatientsWithGivenAttributeTypeAndValues() throws Exception { PersonAttributeCohortDefinition pacd = new PersonAttributeCohortDefinition(); pacd.setAttributeType(new PersonAttributeType(8)); pacd.setValues(Arrays.asList("5")); Cohort cohort = Context.getService(CohortDefinitionService.class).evaluate(pacd, null); Assert.assertEquals(2, cohort.size()); Assert.assertTrue(cohort.contains(2)); Assert.assertTrue(cohort.contains(7)); } /** * Should match all patients with any person attribute type. * * @see {@link PersonAttributeCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)} */ @Test @Verifies(value = "should get patients having any attributes", method = "evaluate(CohortDefinition,EvaluationContext)") public void evaluate_shouldGetPatientsHavingAnyAttributes() throws Exception { // Get all patients with at least one person attribute of any type PersonAttributeCohortDefinition pacd = new PersonAttributeCohortDefinition(); pacd.setAttributeType(null); pacd.setValues(null); Cohort cohort = Context.getService(CohortDefinitionService.class).evaluate(pacd, null); Assert.assertEquals(4, cohort.size()); Assert.assertTrue(cohort.contains(2)); Assert.assertTrue(cohort.contains(6)); Assert.assertTrue(cohort.contains(7)); Assert.assertTrue(cohort.contains(8)); } /** * @see {@link PersonAttributeCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)} */ @Test @Verifies(value = "should get patients having attributes with any given attribute values", method = "evaluate(CohortDefinition,EvaluationContext)") public void evaluate_shouldGetPatientsHavingAttributesWithAnyGivenAttributeValues() throws Exception { PersonAttributeCohortDefinition pacd = new PersonAttributeCohortDefinition(); pacd.setValues(Arrays.asList("Boston, MA", "New York, NY")); Cohort cohort = Context.getService(CohortDefinitionService.class).evaluate(pacd, null); Assert.assertEquals(1, cohort.size()); Assert.assertTrue(cohort.contains(8)); } /** * @see {@link PersonAttributeCohortDefinitionEvaluator#evaluate(CohortDefinition,EvaluationContext)} */ @Test @Verifies(value = "should get patients having attributes with concept attribute values", method = "evaluate(CohortDefinition,EvaluationContext)") public void evaluate_shouldGetPatientsHavingAttributesWithLocationAttributeValues() throws Exception { PersonAttributeCohortDefinition pacd = new PersonAttributeCohortDefinition(); pacd.setAttributeType(Context.getPersonService().getPersonAttributeTypeByName("Civil Status")); List<Concept> civilStatuses = new ArrayList<Concept>(); civilStatuses.add(Context.getConceptService().getConceptByName("MARRIED")); pacd.setValueConcepts(civilStatuses); Cohort cohort = Context.getService(CohortDefinitionService.class).evaluate(pacd, null); Assert.assertEquals(1, cohort.size()); Assert.assertTrue(cohort.contains(8)); } }