private void mergeNames(Patient preferred, Patient notPreferred, PersonMergeLogData mergedData) { // move all names // (must be done after all calls to services above so hbm doesn't try to save things prematurely (hacky) for (PersonName newName : notPreferred.getNames()) { boolean containsName = false; for (PersonName currentName : preferred.getNames()) { containsName = currentName.equalsContent(newName); if (containsName) { break; } } if (!containsName) { PersonName tmpName = constructTemporaryName(newName); preferred.addName(tmpName); mergedData.addCreatedName(tmpName.getUuid()); log.debug("Merging name " + newName.getGivenName() + " to " + preferred.getPatientId()); } } }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorDateOfBirth() throws Exception { //retrieve preferred patient and set a date of birth GregorianCalendar cDate = new GregorianCalendar(); cDate.setTime(new Date()); //milliseconds are not serialized into the database. they will be ignored in the test cDate.set(Calendar.MILLISECOND, 0); Patient preferred = patientService.getPatient(999); preferred.setBirthdate(cDate.getTime()); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertEquals("prior date of birth was not audited", cDate.getTime(), audit.getPersonMergeLogData() .getPriorDateOfBirth()); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorDateOfBirthEstimated() throws Exception { //retrieve preferred patient and set a date of birth GregorianCalendar cDate = new GregorianCalendar(); cDate.setTime(new Date()); Patient preferred = patientService.getPatient(999); preferred.setBirthdate(cDate.getTime()); preferred.setBirthdateEstimated(true); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertTrue("prior estimated date of birth was not audited", audit.getPersonMergeLogData() .isPriorDateOfBirthEstimated()); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorDateOfDeath() throws Exception { //retrieve preferred patient and set a date of birth GregorianCalendar cDate = new GregorianCalendar(); cDate.setTime(new Date()); //milliseconds are not serialized into the database. they will be ignored in the test cDate.set(Calendar.MILLISECOND, 0); Patient preferred = patientService.getPatient(999); preferred.setDeathDate(cDate.getTime()); preferred.setDead(true); preferred.setCauseOfDeath(Context.getConceptService().getConcept(3)); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertEquals("prior date of death was not audited", cDate.getTime(), audit.getPersonMergeLogData() .getPriorDateOfDeath()); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorDateOfDeathEstimated() throws Exception { //retrieve preferred patient and set a date of death GregorianCalendar cDate = new GregorianCalendar(); cDate.setTime(new Date()); Patient preferred = patientService.getPatient(999); preferred.setDeathDate(cDate.getTime()); preferred.setDeathdateEstimated(true); preferred.setCauseOfDeath(Context.getConceptService().getConcept(3)); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertTrue("prior estimated date of death was not audited", audit.getPersonMergeLogData() .getPriorDateOfDeathEstimated()); }
/** * @see PatientService#getCountOfPatients(String) */ @Test public void getCountOfPatients_shouldReturnTheRightCountWhenAPatientHasMultipleMatchingPersonNames() throws Exception { // TODO H2 cannot execute the generated SQL because it requires all // fetched columns to be included in the group by clause Patient patient = patientService.getPatient(2); // sanity check Assert.assertTrue(patient.getPersonName().getGivenName().startsWith("Horati")); // add a name that will match the search phrase patient.addName(new PersonName("Horatio", "Test", "name")); Context.getPatientService().savePatient(patient); Assert.assertEquals(1, Context.getPatientService().getCountOfPatients("Hor").intValue()); }
/** * @see PatientDAO#getPatients(String,String,List<QPatientIdentifierType;>,null) */ @Test public void getPatients_shouldEscapePercentageCharacterInNamePhrase() { Patient patient2 = patientService.getPatient(2); PersonName name = new PersonName("%cats", "and", "dogs"); patient2.addName(name); patientService.savePatient(patient2); //add a new closely matching identifier to another patient Patient patient6 = patientService.getPatient(6); PersonName name6 = new PersonName("acats", "and", "dogs"); patient6.addName(name6); patient6.getPatientIdentifier().setPreferred(true); patientService.savePatient(patient6); updateSearchIndex(); //we expect only one matching patient int actualSize = dao.getPatients("%ca", 0, null).size(); Assert.assertEquals(1, actualSize); Patient actualPatient = dao.getPatients("%ca", 0, null).get(0); //if actually the search returned the matching patient Assert.assertEquals(patient2, actualPatient); }
/** * @see PatientDAO#getPatients(String,String,List<QPatientIdentifierType;>,null) */ @Test public void getPatients_shouldEscapeAnAsterixCharacterInNamePhrase() { Patient patient2 = patientService.getPatient(2); PersonName name = new PersonName("*cats", "and", "dogs"); patient2.addName(name); patientService.savePatient(patient2); //add a new closely matching name to another patient Patient patient6 = patientService.getPatient(6); PersonName name6 = new PersonName("acats", "and", "dogs"); patient6.addName(name6); patient6.getPatientIdentifier().setPreferred(true); patientService.savePatient(patient6); updateSearchIndex(); //we expect only one matching patient int actualSize = dao.getPatients("*ca", 0, null).size(); Assert.assertEquals(1, actualSize); //if actually the search returned the matching patient Patient actualPatient = dao.getPatients("*ca", 0, null).get(0); Assert.assertEquals(patient2, actualPatient); }
/** * @see PatientDAO#getPatients(String,String,List<QPatientIdentifierType;>,null) */ @Test public void getPatients_shouldEscapeUnderscoreCharacterInNamePhrase() { Patient patient2 = patientService.getPatient(2); PersonName name = new PersonName("_cats", "and", "dogs"); patient2.addName(name); patientService.savePatient(patient2); //add a new closely matching name to another patient Patient patient6 = patientService.getPatient(6); PersonName name6 = new PersonName("acats", "and", "dogs"); patient6.addName(name6); patient6.getPatientIdentifier().setPreferred(true); patientService.savePatient(patient6); updateSearchIndex(); //we expect only one matching patient int actualSize = dao.getPatients("_ca", 0, null).size(); Assert.assertEquals(1, actualSize); //if actually the search returned the matching patient Patient actualPatient = dao.getPatients("_ca", 0, null).get(0); Assert.assertEquals(patient2, actualPatient); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorGender() throws Exception { //retrieve preferred patient and set gender Patient preferred = patientService.getPatient(999); preferred.setGender("M"); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); //merge with not preferred Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertEquals("prior gender was not audited", "M", audit.getPersonMergeLogData().getPriorGender()); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorCauseOfDeath() throws Exception { //retrieve preferred patient and set a cause of death Patient preferred = patientService.getPatient(999); preferred.setCauseOfDeath(Context.getConceptService().getConcept(3)); preferred.setDeathDate(new Date()); preferred.setDead(true); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); //merge with not preferred Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertEquals("prior cause of death was not audited", Context.getConceptService().getConcept(3).getUuid(), audit.getPersonMergeLogData().getPriorCauseOfDeath()); }
pName.setMiddleName("E."); pName.setFamilyName("Patient"); patient.addName(pName); PersonAddress pAddress = new PersonAddress(); pAddress.setAddress1("123 My street");
pName.setMiddleName("E."); pName.setFamilyName("Patient"); patient.addName(pName);
voidOrders(Collections.singleton(notPreferred)); PersonName name = new PersonName("first1234", "middle", "last1234"); notPreferred.addName(name); patientService.savePatient(notPreferred);
/** * Regression test for http://dev.openmrs.org/ticket/1375 * * @see PatientService#savePatient(Patient) */ @Test public void savePatient_shouldNotThrowANonUniqueObjectExceptionWhenCalledWithAHandConstructedPatient() throws Exception { Patient patient = new Patient(); patient.setGender("M"); patient.setPatientId(2); // patient.setCreator(new User(1)); // patient.setDateCreated date_created="2005-09-22 00:00:00.0" // changed_by="1" date_changed="2008-08-18 12:29:59.0" patient.addName(new PersonName("This", "Isa", "Test")); PatientIdentifier patientIdentifier = new PatientIdentifier("101-6", new PatientIdentifierType(1), new Location(1)); patientIdentifier.setPreferred(true); patient.addIdentifier(patientIdentifier); Context.getPatientService().savePatient(patient); }
pName.setMiddleName("E."); pName.setFamilyName("Patient"); patient.addName(pName); patient.setGender("male"); PersonAddress pAddress = new PersonAddress();
pName.setMiddleName("E."); pName.setFamilyName("Patient"); patient.addName(pName); patient.setGender("male"); PersonAddress pAddress = new PersonAddress();
/** * Regression test for ticket #1375: org.hibernate.NonUniqueObjectException caused by * PatientIdentifierValidator Manually construct a patient with a correctly-matching patientId * and patient identifier with validator. Calling PatientService.savePatient on that patient * leads to a call to PatientIdentifierValidator.validateIdentifier which used to load the * Patient for that identifier into the hibernate session, leading to a NonUniqueObjectException * when the calling saveOrUpdate on the manually constructed Patient. * * @see PatientService#savePatient(Patient) */ @Test public void savePatient_shouldNotThrowANonUniqueObjectExceptionWhenCalledWithAHandConstructedPatientRegression1375() { Patient patient = new Patient(); patient.setGender("M"); patient.setPatientId(2); patient.addName(new PersonName("This", "Isa", "Test")); PatientIdentifier patientIdentifier = new PatientIdentifier("101-6", new PatientIdentifierType(1), new Location(1)); patientIdentifier.setPreferred(true); patient.addIdentifier(patientIdentifier); patientService.savePatient(patient); }
/** * @see PatientService#savePatient(Patient) */ @Test public void savePatient_shouldSetThePreferredNameAddressAndIdentifierIfNoneIsSpecified() throws Exception { Patient patient = new Patient(); patient.setGender("M"); PatientIdentifier identifier = new PatientIdentifier("QWERTY", patientService.getPatientIdentifierType(2), locationService.getLocation(1)); patient.addIdentifier(identifier); PersonName name = new PersonName("givenName", "middleName", "familyName"); patient.addName(name); PersonAddress address = new PersonAddress(); address.setAddress1("some address"); patient.addAddress(address); Context.getPatientService().savePatient(patient); Assert.assertTrue(identifier.getPreferred()); Assert.assertTrue(name.getPreferred()); Assert.assertTrue(address.getPreferred()); }