use of org.openmrs.module.emrapi.matcher.ObsGroupMatcher in project openmrs-module-coreapps by openmrs.
the class EncounterDiagnosesTagHandlerComponentTest method testHandleSubmissionHandlesValidSubmissionEditingForm.
@Test
public void testHandleSubmissionHandlesValidSubmissionEditingForm() throws Exception {
final DiagnosisMetadata dmd = emrApiProperties.getDiagnosisMetadata();
final Date date = new Date();
// first, create an encounter
final Concept malaria = conceptService.getConcept(11);
final Patient patient = patientService.getPatient(8);
final Encounter existingEncounter = new Encounter();
existingEncounter.setEncounterType(new EncounterType(1));
existingEncounter.setPatient(patient);
existingEncounter.setEncounterDatetime(date);
existingEncounter.setLocation(locationService.getLocation(2));
Obs primaryDiagnosis = dmd.buildDiagnosisObsGroup(new Diagnosis(new CodedOrFreeTextAnswer(malaria), Diagnosis.Order.PRIMARY));
Obs secondaryDiagnosis = dmd.buildDiagnosisObsGroup(new Diagnosis(new CodedOrFreeTextAnswer("Unknown disease"), Diagnosis.Order.SECONDARY));
existingEncounter.addObs(primaryDiagnosis);
existingEncounter.addObs(secondaryDiagnosis);
encounterService.saveEncounter(existingEncounter);
ObjectMapper jackson = new ObjectMapper();
ArrayNode json = jackson.createArrayNode();
{
// change the existing primary diagnosis from PRESUMED to CONFIRMED
ObjectNode diagnosisNode = json.addObject();
diagnosisNode.put("certainty", "CONFIRMED");
diagnosisNode.put("order", "PRIMARY");
diagnosisNode.put("diagnosis", CodedOrFreeTextAnswer.CONCEPT_PREFIX + "11");
diagnosisNode.put("existingObs", primaryDiagnosis.getObsId());
}
{
// this is a new diagnosis
ObjectNode diagnosisNode = json.addObject();
diagnosisNode.put("certainty", "PRESUMED");
diagnosisNode.put("order", "SECONDARY");
diagnosisNode.put("diagnosis", CodedOrFreeTextAnswer.NON_CODED_PREFIX + "I had spelled it wrong before");
}
final String jsonToSubmit = jackson.writeValueAsString(json);
new RegressionTestHelper() {
@Override
public String getXmlDatasetPath() {
return "";
}
@Override
public String getFormName() {
return "encounterDiagnosesSimpleForm";
}
@Override
public Map<String, Object> getFormEntrySessionAttributes() {
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put("uiUtils", new TestUiUtils() {
@Override
public String includeFragment(String providerName, String fragmentId, Map<String, Object> config) throws PageAction {
return "[[ included fragment " + providerName + "." + fragmentId + " here ]]";
}
});
return attributes;
}
@Override
public Patient getPatientToView() throws Exception {
return patient;
}
@Override
public Encounter getEncounterToEdit() {
return existingEncounter;
}
@Override
public String[] widgetLabelsForEdit() {
return new String[] { "Date:", "Location:", "Provider:", "Encounter Type:" };
}
@Override
public void setupEditRequest(MockHttpServletRequest request, Map<String, String> widgets) {
request.setParameter(widgets.get("Date:"), dateAsString(date));
request.setParameter(widgets.get("Location:"), "2");
request.setParameter(widgets.get("Provider:"), "1");
request.setParameter(widgets.get("Encounter Type:"), "1");
request.setParameter("encounterDiagnoses", jsonToSubmit);
}
@Override
public void testEditFormHtml(String html) {
System.out.println(html);
}
@Override
public void testEditedResults(SubmissionResults results) {
results.assertNoErrors();
results.assertEncounterEdited();
List<Obs> diagnoses = new ArrayList<Obs>();
for (Obs obs : results.getEncounterCreated().getObsAtTopLevel(true)) {
if (dmd.isDiagnosis(obs)) {
diagnoses.add(obs);
}
}
Matcher<Obs> newPrimary = new ObsGroupMatcher().withGroupingConcept(dmd.getDiagnosisSetConcept()).withNonVoidedObs(dmd.getDiagnosisCertaintyConcept(), dmd.getConceptFor(Diagnosis.Certainty.CONFIRMED)).withVoidedObs(dmd.getDiagnosisCertaintyConcept(), dmd.getConceptFor(Diagnosis.Certainty.PRESUMED)).withNonVoidedObs(dmd.getDiagnosisOrderConcept(), dmd.getConceptFor(Diagnosis.Order.PRIMARY)).withNonVoidedObs(dmd.getCodedDiagnosisConcept(), malaria);
Matcher<Obs> newSecondary = new ObsGroupMatcher().withGroupingConcept(dmd.getDiagnosisSetConcept()).withNonVoidedObs(dmd.getDiagnosisCertaintyConcept(), dmd.getConceptFor(Diagnosis.Certainty.PRESUMED)).withNonVoidedObs(dmd.getDiagnosisOrderConcept(), dmd.getConceptFor(Diagnosis.Order.SECONDARY)).withNonVoidedObs(dmd.getNonCodedDiagnosisConcept(), "I had spelled it wrong before");
Matcher<Obs> oldSecondary = new ObsGroupMatcher().withGroupingConcept(dmd.getDiagnosisSetConcept()).withVoidedObs(dmd.getDiagnosisCertaintyConcept(), dmd.getConceptFor(Diagnosis.Certainty.PRESUMED)).withVoidedObs(dmd.getDiagnosisOrderConcept(), dmd.getConceptFor(Diagnosis.Order.SECONDARY)).withVoidedObs(dmd.getNonCodedDiagnosisConcept(), "Unknown disease").thatIsVoided();
assertThat(diagnoses.size(), is(3));
assertThat(diagnoses, containsInAnyOrder(newPrimary, newSecondary, oldSecondary));
}
}.run();
}
Aggregations