|
10 | 10 | package org.openmrs.api; |
11 | 11 |
|
12 | 12 | import static org.hamcrest.MatcherAssert.assertThat; |
| 13 | +import static org.hamcrest.Matchers.containsString; |
13 | 14 | import static org.hamcrest.Matchers.empty; |
14 | 15 | import static org.hamcrest.Matchers.is; |
15 | 16 | import static org.hamcrest.Matchers.nullValue; |
@@ -293,7 +294,7 @@ public void saveEncounter_shouldUpdateEncounterSuccessfully() { |
293 | 294 | // file |
294 | 295 | Location loc2 = new Location(2); |
295 | 296 | EncounterType encType2 = new EncounterType(2); |
296 | | - Date d2 = new Date(); |
| 297 | + Date d2 = DateUtils.addDays(origDate, 10); |
297 | 298 | Patient pat2 = new Patient(2); |
298 | 299 |
|
299 | 300 | encounter.setLocation(loc2); |
@@ -586,19 +587,30 @@ public void purgeEncounter_shouldCascadePurgeToObsAndOrders() { |
586 | 587 |
|
587 | 588 | // fetch the encounter to delete from the db |
588 | 589 | Encounter encounterToDelete = es.getEncounter(1); |
| 590 | + List<Integer> existingObsIds = new ArrayList<>(); |
| 591 | + List<Integer> existingOrderIds = new ArrayList<>(); |
| 592 | + for (Obs o : encounterToDelete.getAllObs(true)) { |
| 593 | + existingObsIds.add(o.getObsId()); |
| 594 | + } |
| 595 | + for (Order o : encounterToDelete.getOrders()) { |
| 596 | + existingOrderIds.add(o.getOrderId()); |
| 597 | + } |
589 | 598 |
|
590 | 599 | es.purgeEncounter(encounterToDelete, true); |
591 | 600 |
|
592 | 601 | // try to refetch the encounter. should get a null object |
593 | 602 | Encounter e = es.getEncounter(encounterToDelete.getEncounterId()); |
594 | 603 | assertNull(e, "We shouldn't find the encounter after deletion"); |
595 | 604 |
|
596 | | - ObsService obsService = Context.getObsService(); |
597 | | - assertNull(obsService.getObs(1)); |
598 | | - assertNull(obsService.getObs(2)); |
599 | | - assertNull(obsService.getObs(3)); |
600 | | - |
601 | | - assertNull(Context.getOrderService().getOrder(1)); |
| 605 | + assertFalse(existingObsIds.isEmpty()); |
| 606 | + for (Integer obsId : existingObsIds) { |
| 607 | + assertNull(Context.getObsService().getObs(obsId)); |
| 608 | + } |
| 609 | + |
| 610 | + assertFalse(existingOrderIds.isEmpty()); |
| 611 | + for (Integer orderId : existingOrderIds) { |
| 612 | + assertNull(Context.getOrderService().getOrder(orderId)); |
| 613 | + } |
602 | 614 | } |
603 | 615 |
|
604 | 616 | /** |
@@ -681,7 +693,7 @@ public void saveEncounter_shouldOnlyCascadeTheObsdatetimesToObsWithDifferentInit |
681 | 693 | assertNotNull(obsWithDifferentDateBefore); |
682 | 694 | assertEquals(2, obsWithSameDateBefore.size()); |
683 | 695 |
|
684 | | - Date newDate = new Date(); |
| 696 | + Date newDate = DateUtils.addDays(enc.getEncounterDatetime(), 10); |
685 | 697 | enc.setEncounterDatetime(newDate); |
686 | 698 |
|
687 | 699 | // save the encounter. The obs should pick up the encounter's date |
@@ -1026,11 +1038,20 @@ public void voidEncounter_shouldCascadeToOrders() { |
1026 | 1038 |
|
1027 | 1039 | // get a nonvoided encounter that has some obs |
1028 | 1040 | Encounter encounter = encounterService.getEncounter(1); |
| 1041 | + List<Integer> orderIds = new ArrayList<>(); |
| 1042 | + for (Order order : encounter.getOrders()) { |
| 1043 | + orderIds.add(order.getOrderId()); |
| 1044 | + assertFalse(order.getVoided()); |
| 1045 | + } |
| 1046 | + assertFalse(orderIds.isEmpty()); |
| 1047 | + |
1029 | 1048 | encounterService.voidEncounter(encounter, "Just Testing"); |
1030 | 1049 |
|
1031 | | - Order order = Context.getOrderService().getOrder(1); |
1032 | | - assertTrue(order.getVoided()); |
1033 | | - assertEquals("Just Testing", order.getVoidReason()); |
| 1050 | + for (Integer orderId : orderIds) { |
| 1051 | + Order order = Context.getOrderService().getOrder(orderId); |
| 1052 | + assertTrue(order.getVoided()); |
| 1053 | + assertEquals("Just Testing", order.getVoidReason()); |
| 1054 | + } |
1034 | 1055 | } |
1035 | 1056 |
|
1036 | 1057 | /** |
@@ -1238,9 +1259,10 @@ public void getEncounters_shouldGetEncountersOnOrAfterDate() throws ParseExcepti |
1238 | 1259 | .setIncludeVoided(false).createEncounterSearchCriteria(); |
1239 | 1260 | encounters = Context.getEncounterService().getEncounters(encounterSearchCriteria); |
1240 | 1261 | assertEquals(4, encounters.size()); |
1241 | | - assertEquals(3, encounters.get(0).getEncounterId().intValue()); |
1242 | | - assertEquals(4, encounters.get(1).getEncounterId().intValue()); |
1243 | | - assertEquals(5, encounters.get(2).getEncounterId().intValue()); |
| 1262 | + assertEquals(6, encounters.get(0).getEncounterId().intValue()); |
| 1263 | + assertEquals(3, encounters.get(1).getEncounterId().intValue()); |
| 1264 | + assertEquals(4, encounters.get(2).getEncounterId().intValue()); |
| 1265 | + assertEquals(5, encounters.get(3).getEncounterId().intValue()); |
1244 | 1266 | } |
1245 | 1267 |
|
1246 | 1268 | /** |
@@ -3243,6 +3265,37 @@ public void shouldSaveMultipleOrderGroupsIfDifferentOrdersHaveDifferentOrderGrou |
3243 | 3265 |
|
3244 | 3266 | assertEquals(2, orderGroups.size(), "Two New Order Groups Get Saved"); |
3245 | 3267 | } |
| 3268 | + |
| 3269 | + @Test |
| 3270 | + public void shouldFailToSaveEncounterIfChangesWouldResultInInvalidOrders() { |
| 3271 | + Date today = new Date(); |
| 3272 | + Date yesterday = DateUtils.addDays(today, -1); |
| 3273 | + executeDataSet(ORDER_SET); |
| 3274 | + Encounter encounter = new Encounter(); |
| 3275 | + encounter.setPatient(Context.getPatientService().getPatient(3)); |
| 3276 | + encounter.setEncounterType(Context.getEncounterService().getEncounterType(1)); |
| 3277 | + encounter.setEncounterDatetime(yesterday); |
| 3278 | + |
| 3279 | + Order order = new OrderBuilder().withAction(Order.Action.NEW).withPatient(3).withConcept(1000) |
| 3280 | + .withCareSetting(1).withOrderer(1).withDateActivated(yesterday) |
| 3281 | + .withOrderType(17).withUrgency(Order.Urgency.ROUTINE).build(); |
| 3282 | + |
| 3283 | + encounter.addOrder(order); |
| 3284 | + Context.getEncounterService().saveEncounter(encounter); |
| 3285 | + |
| 3286 | + encounter.setEncounterDatetime(today); |
| 3287 | + ValidationException validationError = null; |
| 3288 | + try { |
| 3289 | + Context.getEncounterService().saveEncounter(encounter); |
| 3290 | + } |
| 3291 | + catch (ValidationException e) { |
| 3292 | + validationError = e; |
| 3293 | + } |
| 3294 | + assertNotNull(validationError); |
| 3295 | + String expectedError = "dateActivated: Date activated cannot be before that of the associated encounter"; |
| 3296 | + assertThat(validationError.getMessage(), containsString(expectedError)); |
| 3297 | + |
| 3298 | + } |
3246 | 3299 |
|
3247 | 3300 | @Test |
3248 | 3301 | public void saveEncounter_shouldCascadeSaveToContainedAllergies() { |
|
0 commit comments