package org.openmrs.module.reporting.query.encounter.evaluator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openmrs.api.EncounterService; import org.openmrs.module.reporting.cohort.definition.CohortDefinition; import org.openmrs.module.reporting.cohort.definition.evaluator.OptionalParameterCohortDefinitionEvaluator; import org.openmrs.module.reporting.common.TestUtil; import org.openmrs.module.reporting.evaluation.EvaluationContext; import org.openmrs.module.reporting.evaluation.parameter.Mapped; import org.openmrs.module.reporting.query.encounter.EncounterQueryResult; import org.openmrs.module.reporting.query.encounter.definition.BasicEncounterQuery; import org.openmrs.module.reporting.query.encounter.definition.ConditionalParameterEncounterQuery; import org.openmrs.module.reporting.query.encounter.service.EncounterQueryService; import org.openmrs.test.BaseContextSensitiveTest; import org.openmrs.test.BaseModuleContextSensitiveTest; import org.springframework.beans.factory.annotation.Autowired; /** * Tests the OptionalParameterCohortDefinition */ public class ConditionalParameterEncounterQueryEvaluatorTest extends BaseModuleContextSensitiveTest { protected final Log log = LogFactory.getLog(getClass()); protected static final String XML_DATASET_PATH = "org/openmrs/module/reporting/include/"; protected static final String XML_REPORT_TEST_DATASET = "ReportTestDataset"; @Autowired EncounterQueryService encounterQueryService; @Autowired EncounterService encounterService; /** * Run this before each unit test in this class. The "@Before" method in * {@link BaseContextSensitiveTest} is run right before this method. */ @Before public void setup() throws Exception { executeDataSet(XML_DATASET_PATH + new TestUtil().getTestDatasetFilename(XML_REPORT_TEST_DATASET)); } /** * @see {@link OptionalParameterCohortDefinitionEvaluator#evaluate(CohortDefinition, EvaluationContext)} */ @Test public void evaluate_shouldSupportIntegerParameter() throws Exception { BasicEncounterQuery q1 = new BasicEncounterQuery(); q1.addEncounterType(encounterService.getEncounterType(1)); q1.addEncounterType(encounterService.getEncounterType(2)); EncounterQueryResult r1 = encounterQueryService.evaluate(q1, new EvaluationContext()); BasicEncounterQuery q2 = new BasicEncounterQuery(); q2.addEncounterType(encounterService.getEncounterType(6)); EncounterQueryResult r2 = encounterQueryService.evaluate(q2, new EvaluationContext()); ConditionalParameterEncounterQuery cpq = new ConditionalParameterEncounterQuery(); cpq.addConditionalQuery("visit", Mapped.mapStraightThrough(q1)); cpq.addConditionalQuery("lab", Mapped.mapStraightThrough(q2)); cpq.setParameterToCheck("type"); EvaluationContext context = new EvaluationContext(); context.addParameterValue("type", "visit"); EncounterQueryResult test1 = encounterQueryService.evaluate(cpq, context); Assert.assertEquals(r1.getSize(), test1.getSize()); Assert.assertTrue(r1.getMemberIds().containsAll(test1.getMemberIds())); context.addParameterValue("type", "lab"); EncounterQueryResult test2 = encounterQueryService.evaluate(cpq, context); Assert.assertEquals(r2.getSize(), test2.getSize()); Assert.assertTrue(r2.getMemberIds().containsAll(test2.getMemberIds())); } }