1+ /**
2+ * This Source Code Form is subject to the terms of the Mozilla Public License,
3+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
4+ * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
5+ * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
6+ *
7+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
8+ * graphic logo is a trademark of OpenMRS Inc.
9+ */
10+
11+ package org .openmrs .module .reporting .cohort .definition .evaluator ;
12+
13+ import org .apache .commons .lang3 .time .DateUtils ;
14+ import org .junit .After ;
15+ import org .junit .Assert ;
16+ import org .junit .Before ;
17+ import org .junit .Test ;
18+ import org .openmrs .CareSetting ;
19+ import org .openmrs .Cohort ;
20+ import org .openmrs .Concept ;
21+ import org .openmrs .Drug ;
22+ import org .openmrs .api .OrderService ;
23+ import org .openmrs .api .context .Context ;
24+ import org .openmrs .module .reporting .cohort .definition .DrugOrderCohortDefinition ;
25+ import org .openmrs .module .reporting .cohort .definition .service .CohortDefinitionService ;
26+ import org .openmrs .module .reporting .common .DateUtil ;
27+ import org .openmrs .module .reporting .common .Match ;
28+ import org .openmrs .test .BaseModuleContextSensitiveTest ;
29+
30+ import java .util .ArrayList ;
31+ import java .util .Date ;
32+ import java .util .List ;
33+
34+
35+ public class DrugOrderCohortDefinitionEvaluatorTest extends BaseModuleContextSensitiveTest {
36+
37+ protected static final String TEST_DATA = "org/openmrs/module/reporting/include/DrugOrderCohortEvaluationData.xml" ;
38+ private DrugOrderCohortDefinition cohortDefinition ;
39+
40+ @ Before
41+ public void setup () throws Exception {
42+ cohortDefinition = new DrugOrderCohortDefinition ();
43+ executeDataSet (TEST_DATA );
44+ }
45+
46+ @ After
47+ public void tearDown () {
48+ cohortDefinition = null ;
49+ }
50+
51+ @ Test
52+ public void evaluateShouldReturnAllPatients () throws Exception {
53+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
54+
55+ Assert .assertTrue (cohort .contains (2 ));
56+ Assert .assertTrue (cohort .contains (7 ));
57+ Assert .assertTrue (cohort .contains (8 ));
58+ Assert .assertTrue (cohort .contains (21 ));
59+ Assert .assertTrue (cohort .contains (22 ));
60+ Assert .assertEquals (5 , cohort .size ());
61+ }
62+
63+ @ Test
64+ public void evaluateShouldReturnAllPatientsCurrentlyActiveOnDrugs () throws Exception {
65+ cohortDefinition .setActiveOnOrAfter (new Date ());
66+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
67+ Assert .assertTrue (cohort .contains (2 ));
68+ Assert .assertTrue (cohort .contains (22 ));
69+ Assert .assertTrue (cohort .contains (7 ));
70+ Assert .assertEquals (3 , cohort .size ());
71+ }
72+
73+ @ Test
74+ public void evaluateShouldReturnAllPatientsCurrentlyNotActiveOnDrugs () throws Exception {
75+
76+ cohortDefinition .setActiveOnOrBefore (DateUtils .addDays (new Date (2013 , 12 , 2 ), -1 ));
77+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
78+ Assert .assertTrue (cohort .contains (8 ));
79+ Assert .assertTrue (cohort .contains (2 ));
80+ Assert .assertTrue (cohort .contains (21 ));
81+ Assert .assertEquals (3 , cohort .size ());
82+ }
83+
84+ @ Test
85+ public void evaluateShouldReturnAllPatientsThatHaveTakenAnyofListedDrugs () throws Exception {
86+ List drugSetList = new ArrayList <Concept >();
87+ drugSetList .add (new Concept (88 ));
88+ drugSetList .add (new Concept (792 ));
89+ cohortDefinition .setDrugSets (drugSetList );
90+ cohortDefinition .setWhich (Match .ANY );
91+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
92+ Assert .assertTrue (cohort .contains (2 ));
93+ Assert .assertTrue (cohort .contains (7 ));
94+ Assert .assertEquals (2 , cohort .size ());
95+
96+ }
97+
98+ @ Test
99+ public void evaluateShouldReturnAllPatientsThatHaveTakenAnyListedDrugByDefault () throws Exception {
100+ List drugSetList = new ArrayList <Concept >();
101+ drugSetList .add (new Concept (3 ));
102+ drugSetList .add (new Concept (792 ));
103+ cohortDefinition .setDrugSets (drugSetList );
104+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
105+ Assert .assertTrue (cohort .contains (2 ));
106+ Assert .assertTrue (cohort .contains (8 ));
107+ Assert .assertTrue (cohort .contains (21 ));
108+ Assert .assertTrue (cohort .contains (22 ));
109+ Assert .assertEquals (4 , cohort .size ());
110+
111+ }
112+
113+ @ Test
114+ public void evaluateShouldReturnAllPatientsThatHaveTakenAnyofDrugs () throws Exception {
115+ List drugs = new ArrayList <Drug >();
116+ drugs .add (new Drug (3 ));
117+ drugs .add (new Drug (2 ));
118+ cohortDefinition .setDrugs (drugs );
119+ cohortDefinition .setWhich (Match .ANY );
120+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
121+ Assert .assertTrue (cohort .contains (2 ));
122+ Assert .assertTrue (cohort .contains (7 ));
123+ Assert .assertEquals (2 , cohort .size ());
124+
125+ }
126+
127+ @ Test
128+ public void evaluateShouldReturnAllPatientsThatHaveTakenAnyDrugByDefault () throws Exception {
129+ List drugs = new ArrayList <Drug >();
130+ drugs .add (new Drug (11 ));
131+ drugs .add (new Drug (2 ));
132+ cohortDefinition .setDrugs (drugs );
133+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
134+ Assert .assertTrue (cohort .contains (2 ));
135+ Assert .assertTrue (cohort .contains (8 ));
136+ Assert .assertTrue (cohort .contains (21 ));
137+ Assert .assertTrue (cohort .contains (22 ));
138+ Assert .assertEquals (4 , cohort .size ());
139+
140+ }
141+
142+ @ Test
143+ public void evaluateShouldReturnAllPatientsThatHaveNeverTakenDrugs () throws Exception {
144+ List drugs = new ArrayList <Concept >();
145+ drugs .add (new Drug (3 ));
146+ drugs .add (new Drug (2 ));
147+ cohortDefinition .setDrugs (drugs );
148+ cohortDefinition .setWhich (Match .NONE );
149+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
150+ Assert .assertTrue (cohort .contains (8 ));
151+ Assert .assertTrue (cohort .contains (21 ));
152+ Assert .assertTrue (cohort .contains (22 ));
153+ Assert .assertEquals (3 , cohort .size ());
154+ }
155+
156+ @ Test
157+ public void evaluateShouldReturnAllPatientsThatHaveNeverTakenListedDrugs () throws Exception {
158+ List drugSetList = new ArrayList <Concept >();
159+ drugSetList .add (new Concept (88 ));
160+ drugSetList .add (new Concept (792 ));
161+ cohortDefinition .setDrugSets (drugSetList );
162+ cohortDefinition .setWhich (Match .NONE );
163+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
164+ Assert .assertTrue (cohort .contains (8 ));
165+ Assert .assertTrue (cohort .contains (21 ));
166+ Assert .assertTrue (cohort .contains (22 ));
167+ Assert .assertEquals (3 , cohort .size ());
168+ }
169+
170+ @ Test
171+ public void evaluateShouldReturnAllPatientsThatHaveTakenAllListedDrugs () throws Exception {
172+ List drugSetList = new ArrayList <Concept >();
173+ drugSetList .add (new Concept (88 ));
174+ drugSetList .add (new Concept (792 ));
175+ cohortDefinition .setDrugSets (drugSetList );
176+ cohortDefinition .setWhich (Match .ALL );
177+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
178+ Assert .assertEquals (1 , cohort .size ());
179+ Assert .assertTrue (cohort .contains (2 ));
180+ }
181+
182+ @ Test
183+ public void evaluateShouldReturnAllPatientsNotActiveOnDrugsAfterDate () throws Exception {
184+ cohortDefinition .setActiveOnOrBefore (DateUtil .getDateTime (2013 , 12 , 2 ));
185+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
186+ Assert .assertTrue (cohort .contains (8 ));
187+ Assert .assertTrue (cohort .contains (2 ));
188+ Assert .assertEquals (2 , cohort .size ());
189+ }
190+
191+ @ Test
192+ public void evaluateShouldReturnAllPatientsCurrentlyActiveOnDrugsFromDate () throws Exception {
193+ cohortDefinition .setActiveOnOrAfter (DateUtil .getDateTime (2013 , 12 , 7 ));
194+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
195+ Assert .assertTrue (cohort .contains (22 ));
196+ Assert .assertTrue (cohort .contains (7 ));
197+ Assert .assertTrue (cohort .contains (2 ));
198+ Assert .assertTrue (cohort .contains (21 ));
199+ Assert .assertEquals (4 , cohort .size ());
200+ }
201+ @ Test
202+ public void evaluateShouldReturnAllPatientsWhoStartedTakingDrugsBeforeSpecifiedDate () throws Exception {
203+ cohortDefinition .setActivatedOnOrBefore (DateUtil .getDateTime (2008 , 8 , 2 ));
204+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
205+ Assert .assertTrue (cohort .contains (2 ));
206+ Assert .assertTrue (cohort .contains (22 ));
207+ Assert .assertEquals (2 , cohort .size ());
208+ }
209+
210+ @ Test
211+ public void evaluateShouldReturnAllPatientsWhoStartedTakingDrugsAfterSpecifiedDate () throws Exception {
212+ cohortDefinition .setActivatedOnOrAfter (DateUtil .getDateTime (2008 , 8 , 10 ));
213+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
214+ Assert .assertTrue (cohort .contains (2 ));
215+ Assert .assertTrue (cohort .contains (7 ));
216+ Assert .assertEquals (2 , cohort .size ());
217+ }
218+
219+ @ Test
220+ public void evaluateShouldReturnAllPatientsOnDrugsOnSpecifiedDate () throws Exception {
221+ cohortDefinition .setActiveOnDate (DateUtil .getDateTime (2007 , 12 , 3 ));
222+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
223+ Assert .assertTrue (cohort .contains (2 ));
224+ Assert .assertEquals (1 , cohort .size ());
225+ }
226+
227+ @ Test
228+ public void evaluateShouldReturnAllPatientsTakingAnyDrugWithinADateRange () throws Exception {
229+ cohortDefinition .setActivatedOnOrAfter (DateUtil .getDateTime (2008 , 8 , 1 ));
230+ cohortDefinition .setActivatedOnOrBefore (DateUtil .getDateTime (2008 , 8 , 8 ));
231+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
232+ Assert .assertTrue (cohort .contains (2 ));
233+ Assert .assertTrue (cohort .contains (7 ));
234+ Assert .assertTrue (cohort .contains (8 ));
235+ Assert .assertTrue (cohort .contains (21 ));
236+ Assert .assertTrue (cohort .contains (22 ));
237+ Assert .assertEquals (5 , cohort .size ());
238+ }
239+
240+ @ Test
241+ public void evaluateShouldReturnAllPatientsTakingSpecifiedDrugBeforeDate () throws Exception {
242+ List drugSetList = new ArrayList <Concept >();
243+ drugSetList .add (new Concept (88 ));
244+ cohortDefinition .setDrugSets (drugSetList );
245+ cohortDefinition .setActivatedOnOrBefore (DateUtil .getDateTime (2008 , 8 , 2 ));
246+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
247+ Assert .assertTrue (cohort .contains (2 ));
248+ }
249+
250+ @ Test
251+ public void evaluateShouldReturnAllInSpecifiedCareSetting () throws Exception {
252+ CareSetting careSetting = Context .getService (OrderService .class ).getCareSetting (1 );
253+ cohortDefinition .setCareSetting (careSetting );
254+ Cohort cohort = Context .getService (CohortDefinitionService .class ).evaluate (cohortDefinition , null );
255+ Assert .assertTrue (cohort .contains (2 ));
256+ Assert .assertTrue (cohort .contains (7 ));
257+ Assert .assertTrue (cohort .contains (8 ));
258+ Assert .assertTrue (cohort .contains (21 ));
259+ Assert .assertTrue (cohort .contains (22 ));
260+ Assert .assertEquals (5 , cohort .size ());
261+
262+ }
263+ }
0 commit comments