private void mergeEncounters(Patient preferred, Patient notPreferred, PersonMergeLogData mergedData) { // change all encounters. This will cascade to obs and orders contained in those encounters // TODO: this should be a copy, not a move EncounterService es = Context.getEncounterService(); EncounterSearchCriteria notPreferredPatientEncounterSearchCriteria = new EncounterSearchCriteriaBuilder() .setIncludeVoided(true) .setPatient(notPreferred) .createEncounterSearchCriteria(); for (Encounter e : es.getEncounters(notPreferredPatientEncounterSearchCriteria)) { e.setPatient(preferred); log.debug("Merging encounter " + e.getEncounterId() + " to " + preferred.getPatientId()); Encounter persisted = es.saveEncounter(e); mergedData.addMovedEncounter(persisted.getUuid()); } }
@Test public void shouldFailIfAnEditedOrderIsFlushed() { Encounter encounter = encounterService.getEncounter(3); assertFalse(encounter.getOrders().isEmpty()); encounter.getOrders().iterator().next().setInstructions("new"); expectedException.expect(APIException.class); expectedException.expectMessage(Matchers.is(Context.getMessageSourceService().getMessage("editing.fields.not.allowed", new Object[] { "[instructions]", Order.class.getSimpleName() }, null))); encounterService.saveEncounter(encounter); Context.flushSession(); }
@Test public void saveEncounter_shouldUpdateValueOfLeafObsAndNotDuplicateAtEncounterLevel() { executeDataSet(ENC_OBS_HIERARCHY_DATA_XML); Encounter encounter = Context.getEncounterService().getEncounter(100); assertEquals(1, encounter.getObsAtTopLevel(true).size()); Obs topLevelObs = encounter.getObsAtTopLevel(true).iterator().next(); topLevelObs.getGroupMembers().iterator().next().setValueText("editing first obs"); encounter.addObs(topLevelObs); Encounter savedEncounter = Context.getEncounterService().saveEncounter(encounter); assertEquals(1, savedEncounter.getObsAtTopLevel(true).size()); }
/** * @see EncounterService#unvoidEncounter(Encounter) */ @Test public void saveEncounter_shouldNotCascadeToExistingOrder() { EncounterService es = Context.getEncounterService(); TestOrder order = (TestOrder) Context.getOrderService().getOrder(7); order.setVoided(true); Encounter encounter = es.getEncounter(6); es.saveEncounter(encounter); String sql = "SELECT voided FROM orders WHERE order_id=7"; Boolean voided = (Boolean) Context.getAdministrationService().executeSQL(sql, true).get(0).get(0); Assert.assertFalse(voided); }
/** * @see RequireVoidReasonSaveHandler#handle(Voidable,User,Date,String) */ @Test public void handle_shouldNotThrowExceptionIfVoidReasonIsNotBlank() { Encounter e = Context.getEncounterService().getEncounter(3); e.setVoided(true); e.setVoidReason("Some Reason"); Context.getEncounterService().saveEncounter(e); }
/** * @see RequireVoidReasonSaveHandler#handle(Voidable,User,Date,String) */ @Test(expected = APIException.class) public void handle_shouldThrowAPIExceptionIfEncounterVoidReasonIsEmpty() { Encounter e = Context.getEncounterService().getEncounter(3); e.setVoided(true); e.setVoidReason(""); Context.getEncounterService().saveEncounter(e); }
/** * @see RequireVoidReasonSaveHandler#handle(Voidable,User,Date,String) */ @Test(expected = APIException.class) public void handle_shouldThrowAPIExceptionIfObsVoidReasonIsBlank() { Encounter e = Context.getEncounterService().getEncounter(3); e.setVoided(true); e.setVoidReason(" "); Context.getEncounterService().saveEncounter(e); }
/** * When you save the encounter with a changed location, the location change should be cascaded * to all the obs associated with the encounter that had the same location as the encounter. * * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldCascadeChangeOfLocationInEncounterToContainedObs() { EncounterService es = Context.getEncounterService(); Encounter enc = buildEncounter(); es.saveEncounter(enc); // Now add an obs to it Obs newObs = new Obs(); newObs.setConcept(Context.getConceptService().getConcept(1)); newObs.setValueNumeric(50d); Location location = new Location(1); newObs.setLocation(location); enc.addObs(newObs); es.saveEncounter(enc); enc.setLocation(location); es.saveEncounter(enc); assertEquals(enc.getLocation(), newObs.getLocation()); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldNotAssignEncounterToVisitIfNoHandlerIsRegistered() { Encounter encounter = buildEncounter(); //We should have no visit assertNull(encounter.getVisit()); Context.getEncounterService().saveEncounter(encounter); //We should have no visit assertNull(encounter.getVisit()); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldCascadePatientToOrdersInTheEncounter() { Encounter enc = Context.getEncounterService().getEncounter(15); Order existing = enc.getOrders().iterator().next(); // for some reason the xml for the existing encounter has already given // this order a different patient than the encounter that it's contained // in, but let's verify that: Assert.assertNotSame(enc.getPatient().getId(), existing.getPatient().getId()); Context.getEncounterService().saveEncounter(enc); Assert.assertEquals(enc.getPatient().getId(), existing.getPatient().getId()); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test(expected = APIException.class) public void saveEncounter_shouldFailfIfUserIsNotSupposedToEditEncountersOfTypeOfGivenEncounter() { // get encounter that has type with edit privilege set Encounter encounter = getEncounterWithEditPrivilege(); User user = Context.getUserService().getUserByUsername("test_user"); assertNotNull(user); // left this user as is - i.e. without required privilege // and authenticate under it's account Context.becomeUser(user.getSystemId()); // have to add privilege in order to be able to call saveEncounter(Encounter) method Context.addProxyPrivilege(PrivilegeConstants.EDIT_ENCOUNTERS); Context.getEncounterService().saveEncounter(encounter); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldSaveEncounterWithBasicDetails() { Encounter encounter = buildEncounter(); EncounterService es = Context.getEncounterService(); es.saveEncounter(encounter); assertNotNull("The saved encounter should have an encounter id now", encounter.getEncounterId()); Encounter newSavedEncounter = es.getEncounter(encounter.getEncounterId()); assertNotNull("We should get back an encounter", newSavedEncounter); assertTrue("The created encounter needs to equal the pojo encounter", encounter.equals(newSavedEncounter)); }
@Test public void saveEncounter_shouldSaveEncounterWithComplexObs() { executeDataSet(ENC_OBS_HIERARCHY_DATA_XML); EncounterService es = Context.getEncounterService(); Encounter encounter = es.getEncounter(101); Obs observation = buildObs(); observation.setLocation(encounter.getLocation()); observation.setPerson(encounter.getPatient()); encounter.addObs(observation); es.saveEncounter(encounter); Context.flushSession(); Context.clearSession(); encounter = es.getEncounter(101); assertEquals(2, encounter.getObsAtTopLevel(true).size()); }
/** * @see VisitValidator#validate(Object,Errors) */ @Test public void validate_shouldFailIfTheStartDatetimeIsAfterAnyEncounter() { Visit visit = Context.getVisitService().getVisit(1); Encounter encounter = Context.getEncounterService().getEncounter(3); visit.setPatient(encounter.getPatient()); encounter.setVisit(visit); encounter.setEncounterDatetime(visit.getStartDatetime()); Context.getEncounterService().saveEncounter(encounter); //Set visit start date to after the encounter date. Date date = new Date(encounter.getEncounterDatetime().getTime() + 1); visit.setStartDatetime(date); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertEquals(true, errors.hasFieldErrors("startDatetime")); }
/** * @see VisitValidator#validate(Object,Errors) */ @Test public void validate_shouldFailIfTheStopDatetimeIsBeforeAnyEncounter() { Visit visit = Context.getVisitService().getVisit(1); Encounter encounter = Context.getEncounterService().getEncounter(3); visit.setPatient(encounter.getPatient()); encounter.setVisit(visit); encounter.setEncounterDatetime(visit.getStartDatetime()); Context.getEncounterService().saveEncounter(encounter); //Set visit stop date to before the encounter date. Date date = new Date(encounter.getEncounterDatetime().getTime() - 1); visit.setStopDatetime(date); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertEquals(true, errors.hasFieldErrors("stopDatetime")); }
/** * @see VisitService#saveVisit(Visit) */ @Test public void saveVisit_shouldAssociateEncounterWithVisitOnSaveEncounter() { Visit visit = visitService.getVisit(1); EncounterService es = Context.getEncounterService(); Encounter encounter = new Encounter(); encounter.setEncounterDatetime(new Date()); encounter.setPatient(visit.getPatient()); encounter.setLocation(visit.getLocation()); encounter.setEncounterType(es.getEncounterType(1)); visit.addEncounter(encounter); Context.getEncounterService().saveEncounter(encounter); Integer encounterId = encounter.getEncounterId(); Context.flushSession(); Context.clearSession(); // reload the visit visit = visitService.getVisit(1); assertEquals(1, visit.getEncounters().size()); assertEquals(encounterId, ((Encounter) visit.getEncounters().toArray()[0]).getEncounterId()); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldNotAssignEncounterToVisitIfTheNoAssignHandlerIsRegistered() { Encounter encounter = buildEncounter(); //We should have no visit assertNull(encounter.getVisit()); GlobalProperty gp = Context.getAdministrationService().getGlobalPropertyObject( OpenmrsConstants.GP_VISIT_ASSIGNMENT_HANDLER); gp.setPropertyValue("org.openmrs.api.handler.NoVisitAssignmentHandler"); Context.getAdministrationService().saveGlobalProperty(gp); Context.getEncounterService().saveEncounter(encounter); //We should have no visit. assertNull(encounter.getVisit()); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldNotOverwriteCreatorIfNonNull() { EncounterService encounterService = Context.getEncounterService(); // the encounter to save with a non null creator Encounter encounter = buildEncounter(); encounter.setCreator(new User(4)); // make sure the logged in user isn't the user we're testing with assertNotSame(encounter.getCreator(), Context.getAuthenticatedUser()); encounterService.saveEncounter(encounter); // make sure the encounter creator is user 4 not user 1 assertEquals(4, encounter.getCreator().getId().intValue()); // make sure we can fetch this new encounter // from the database and its values are the same as the passed in ones Encounter newEncounter = encounterService.getEncounter(encounter.getEncounterId()); assertNotNull(newEncounter); assertEquals(4, encounter.getCreator().getId().intValue()); assertNotSame(encounter.getCreator(), Context.getAuthenticatedUser()); }
/** * @see EncounterService#saveEncounter(Encounter) */ @Test public void saveEncounter_shouldAssignEncounterToVisitIfTheAssignToExistingHandlerIsRegistered() { Encounter encounter = buildEncounter(); //We should have no visit assertNull(encounter.getVisit()); GlobalProperty gp = Context.getAdministrationService().getGlobalPropertyObject( OpenmrsConstants.GP_VISIT_ASSIGNMENT_HANDLER); gp.setPropertyValue("org.openmrs.api.handler.ExistingVisitAssignmentHandler"); Context.getAdministrationService().saveGlobalProperty(gp); Context.getEncounterService().saveEncounter(encounter); //We should have a visit. assertNotNull(encounter.getVisit()); assertNotNull(encounter.getVisit().getVisitId()); }
/** * @see EncounterService#unvoidEncounter(Encounter) */ @Test public void saveEncounter_shouldSetDateStoppedOnTheOriginalAfterAddingReviseOrder() { EncounterService es = Context.getEncounterService(); TestOrder order = (TestOrder) Context.getOrderService().getOrder(7); Assert.assertNull(order.getDateStopped()); Encounter encounter = es.getEncounter(6); TestOrder reviseOrder = order.cloneForRevision(); reviseOrder.setOrderer(Context.getProviderService().getProvider(1)); encounter.addOrder(reviseOrder); es.saveEncounter(encounter); Context.flushSession(); Context.clearSession(); Date dateStopped = Context.getOrderService().getOrder(7).getDateStopped(); Assert.assertNotNull(dateStopped); }