@@ -135,8 +135,70 @@ public void shouldFailValidationIfOverlappingOrders() {
135135 FormResultsTester results = formSessionTester .submitForm ();
136136 results .assertErrorMessage ("htmlformentry.orders.overlappingScheduleWithActiveOrder" );
137137 }
138-
139- @ Test
138+
139+ @ Test
140+ public void shouldAllowEarlierOrderIfNonOverlappingByCalculatedExpiryDate () {
141+ FormTester formTester = FormTester .buildForm ("orderTestForm.xml" );
142+
143+ // Enter an encounter with an order for drug 2
144+ {
145+ FormSessionTester formSessionTester = formTester .openNewForm (6 );
146+ formSessionTester .setEncounterFields ("2020-03-30" , "2" , "502" );
147+ OrderFieldTester triomuneField = OrderFieldTester .forDrug (2 , formSessionTester );
148+ triomuneField .orderAction ("NEW" ).careSetting ("2" ).urgency (Order .Urgency .ROUTINE .name ());
149+ triomuneField .freeTextDosing ("Triomune instructions" );
150+ FormResultsTester results = formSessionTester .submitForm ();
151+ results .assertNoErrors ().assertEncounterCreated ().assertOrderCreatedCount (1 ).assertNonVoidedOrderCount (1 );
152+ DrugOrder o1 = results .assertDrugOrder (Order .Action .NEW , 2 );
153+ TestUtil .assertDate (o1 .getDateActivated (), "yyyy-MM-dd HH:mm:ss" , "2020-03-30 00:00:00" );
154+ assertThat (o1 .getDateStopped (), nullValue ());
155+ }
156+
157+ // Now, enter an encounter month earlier, but with a duration of only 20 days
158+ FormSessionTester formSessionTester = formTester .openNewForm (6 );
159+ formSessionTester .setEncounterFields ("2020-02-28" , "2" , "502" );
160+ OrderFieldTester triomuneField = OrderFieldTester .forDrug (2 , formSessionTester );
161+ triomuneField .orderAction ("NEW" ).careSetting ("2" ).urgency (Order .Urgency .ROUTINE .name ());
162+ triomuneField .freeTextDosing ("Triomune instructions" );
163+ triomuneField .duration ("20" );
164+ triomuneField .durationUnits ("28" ); // duration concept for days
165+ FormResultsTester results = formSessionTester .submitForm ();
166+ results .assertNoErrors ().assertEncounterCreated ().assertOrderCreatedCount (1 ).assertNonVoidedOrderCount (1 );
167+ }
168+
169+ @ Test
170+ public void shouldNotAllowEarlierOrderIfOverlappingByCalculatedExpiryDate () {
171+ FormTester formTester = FormTester .buildForm ("orderTestForm.xml" );
172+
173+ // Enter an encounter with an order for drug 2
174+ {
175+ FormSessionTester formSessionTester = formTester .openNewForm (6 );
176+ formSessionTester .setEncounterFields ("2020-03-30" , "2" , "502" );
177+ OrderFieldTester triomuneField = OrderFieldTester .forDrug (2 , formSessionTester );
178+ triomuneField .orderAction ("NEW" ).careSetting ("2" ).urgency (Order .Urgency .ROUTINE .name ());
179+ triomuneField .freeTextDosing ("Triomune instructions" );
180+ FormResultsTester results = formSessionTester .submitForm ();
181+ results .assertNoErrors ().assertEncounterCreated ().assertOrderCreatedCount (1 ).assertNonVoidedOrderCount (1 );
182+ DrugOrder o1 = results .assertDrugOrder (Order .Action .NEW , 2 );
183+ TestUtil .assertDate (o1 .getDateActivated (), "yyyy-MM-dd HH:mm:ss" , "2020-03-30 00:00:00" );
184+ assertThat (o1 .getDateStopped (), nullValue ());
185+ }
186+
187+ // Now, enter an encounter month earlier, with a duration of 40 days
188+ FormSessionTester formSessionTester = formTester .openNewForm (6 );
189+ formSessionTester .setEncounterFields ("2020-02-28" , "2" , "502" );
190+ OrderFieldTester triomuneField = OrderFieldTester .forDrug (2 , formSessionTester );
191+ triomuneField .orderAction ("NEW" ).careSetting ("2" ).urgency (Order .Urgency .ROUTINE .name ());
192+ triomuneField .freeTextDosing ("Triomune instructions" );
193+ triomuneField .duration ("40" );
194+ triomuneField .durationUnits ("28" ); // duration concept for days
195+ FormResultsTester results = formSessionTester .submitForm ();
196+ results .assertErrorMessage ("htmlformentry.orders.overlappingScheduleWithActiveOrder" );
197+ }
198+
199+
200+
201+ @ Test
140202 public void shouldFailValidationIfMultipleOrdersPlacedForSameOrderable () {
141203 FormTester formTester = FormTester .buildForm ("orderTestForm.xml" );
142204
0 commit comments