package org.openmrs.reporting; import java.util.Arrays; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import javax.swing.event.TreeSelectionEvent; import org.junit.Assert; import org.junit.Test; import org.openmrs.Cohort; import org.openmrs.Concept; import org.openmrs.Location; import org.openmrs.Program; import org.openmrs.api.PatientSetService.BooleanOperator; import org.openmrs.api.PatientSetService.TimeModifier; import org.openmrs.api.context.Context; import org.openmrs.report.EvaluationContext; import org.openmrs.test.BaseContextSensitiveTest; import org.openmrs.test.Verifies; public class InversePatientFilterTest extends BaseContextSensitiveTest { /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with compound patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithCompoundPatientFilter() throws Exception { PatientFilter a = new DrugOrderPatientFilter(); PatientFilter b = new EncounterPatientFilter(); List<PatientFilter> filters = Arrays.asList(a, b); CompoundPatientFilter f = new CompoundPatientFilter(); f.setOperator(BooleanOperator.AND); f.setFilters(filters); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with drug order filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithDrugOrderFilter() throws Exception { PatientFilter f = new DrugOrderFilter(); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with drug order patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithDrugOrderPatientFilter() throws Exception { PatientFilter f = new DrugOrderPatientFilter(); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with drug order stop filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithDrugOrderStopFilter() throws Exception { PatientFilter f = new DrugOrderStopFilter(); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with encounter patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithEncounterPatientFilter() throws Exception { PatientFilter f = new EncounterPatientFilter(); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with location patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithLocationPatientFilter() throws Exception { LocationPatientFilter f = new LocationPatientFilter(); f.setLocation(new Location(1)); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with obs patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithObsPatientFilter() throws Exception { ObsPatientFilter f = new ObsPatientFilter(); f.setQuestion(new Concept(5089)); f.setTimeModifier(TimeModifier.ANY); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with patient characteristic filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithPatientCharacteristicFilter() throws Exception { PatientFilter f = new PatientCharacteristicFilter(); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with person attribute filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithPersonAttributeFilter() throws Exception { PatientFilter f = new PersonAttributeFilter(); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with program patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithProgramPatientFilter() throws Exception { ProgramPatientFilter f = new ProgramPatientFilter(); f.setProgram(new Program(1)); helper(f); } /** * @see {@link InversePatientFilter#filter(Cohort,EvaluationContext)} * */ @Test @Verifies(value = "should not fail with program state patient filter", method = "filter(Cohort,EvaluationContext)") public void filter_shouldNotFailWithProgramStatePatientFilter() throws Exception { PatientFilter f = new ProgramStatePatientFilter(); helper(f); } private void helper(PatientFilter f) { InversePatientFilter inv = new InversePatientFilter(f); Cohort normal = f.filter(null, null); Cohort inverse = inv.filter(null, null); Cohort together = Cohort.union(normal, inverse); Cohort everyone = Context.getPatientSetService().getAllPatients(); Assert.assertEquals(everyone.size(), normal.size() + inverse.size()); assertEqual(everyone, together); } private void assertEqual(Cohort a, Cohort b) { Assert.assertEquals(a.size(), b.size()); SortedSet<Integer> aMembers = new TreeSet<Integer>(a.getMemberIds()); SortedSet<Integer> bMembers = new TreeSet<Integer>(b.getMemberIds()); Assert.assertEquals(aMembers, bMembers); } }