package org.openmrs.module.reporting.dataset.definition.evaluator; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.openmrs.Cohort; import org.openmrs.api.context.Context; import org.openmrs.logic.LogicService; import org.openmrs.module.reporting.common.TestUtil; import org.openmrs.module.reporting.dataset.DataSet; import org.openmrs.module.reporting.dataset.definition.DataSetDefinition; import org.openmrs.module.reporting.dataset.definition.LogicDataSetDefinition; import org.openmrs.module.reporting.dataset.definition.service.DataSetDefinitionService; import org.openmrs.module.reporting.evaluation.EvaluationContext; import org.openmrs.module.reporting.report.util.ReportUtil; import org.openmrs.test.BaseContextSensitiveTest; import org.openmrs.test.BaseModuleContextSensitiveTest; import org.openmrs.test.Verifies; // MS: Ignoring for now since we need to start up Logic module and I am getting DB errors doing so @Ignore public class LogicDataSetEvaluatorTest 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 LogicDataSetEvaluator#evaluate(DataSetDefinition,EvaluationContext)} */ @Test @Verifies(value = "should evaluate a logic data set definition", method = "evaluate(DataSetDefinition,EvaluationContext)") public void evaluate_shouldEvaluateALogicDataSetDefinition() throws Exception { Cohort cohort = new Cohort(); cohort.addMember(7); cohort.addMember(20); cohort.addMember(21); EvaluationContext evalContext = new EvaluationContext(); evalContext.setBaseCohort(cohort); LogicService ls = Context.getLogicService(); ls.addRule("gender", ls.getRule("%%person.gender")); ls.addRule("birthdate", ls.getRule("%%person.birthdate")); ls.addRule("CD4", ls.getRule("%%obs.CD4 COUNT")); LogicDataSetDefinition def = new LogicDataSetDefinition(); def.addColumn("gender", "Gender", "gender", null); def.addColumn("birthdate", "Birth Date", "birthdate", null); def.addColumn("cd4", "Last CD4", "last CD4", null); DataSet result = Context.getService(DataSetDefinitionService.class).evaluate(def, evalContext); String csv = ReportUtil.toCsv(result); Assert.assertEquals("\"gender\",\"birthdate\",\"cd4\",\n\"F\",\"25/08/1976\",\"175.0\",\n\"F\",\"08/02/1925\",\"45.0\",\n\"M\",\"08/06/1959\",\"50.0\",\n", csv); } }