Skip to content

Commit

Permalink
add unit tests for questionnaire evaluation
Browse files Browse the repository at this point in the history
  • Loading branch information
githengi committed Jun 29, 2020
1 parent c401f1f commit 3cd5cae
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package org.smartregister.pathevaluator;

import java.util.Collection;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;

Expand Down Expand Up @@ -105,7 +106,8 @@ public boolean evaluateBooleanExpression(Resource resource, String expression) {
public FHIRPathElementNode evaluateElementExpression(DomainResource resource, String expression) {

try {
return fhirPathEvaluator.evaluate(resource, expression).iterator().next().asElementNode();
Iterator<FHIRPathNode> iterator = fhirPathEvaluator.evaluate(resource, expression).iterator();
return iterator.hasNext() ? iterator.next().asElementNode() : null;
}
catch (FHIRPathException e) {
logger.log(Level.SEVERE, "Error execuring expression " + expression, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void evaluatePlan(PlanDefinition planDefinition, PlanDefinition existingP
*/
public void evaluatePlan(PlanDefinition planDefinition, QuestionnaireResponse questionnaireResponse) {
QuestionnaireResponse.Item.Answer location = PathEvaluatorLibrary.getInstance()
.evaluateElementExpression(questionnaireResponse, "QuestionnaireResponse.item.where(linkId='locationId'")
.evaluateElementExpression(questionnaireResponse, "QuestionnaireResponse.item.where(linkId='locationId').answer")
.element().as(QuestionnaireResponse.Item.Answer.class);

evaluatePlan(planDefinition, TriggerType.EVENT_SUBMISSION,
Expand Down
4 changes: 3 additions & 1 deletion src/test/java/org/smartregister/pathevaluator/TestData.java
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,10 @@ public static QuestionnaireResponse createResponse() {
.answer(Answer.builder().value(of("Residential Structure")).build()).build();
Item businessStatus = Item.builder().linkId(of("business_status"))
.answer(Answer.builder().value(of("Not Visited")).build()).build();
Item location = Item.builder().linkId(of("locationId"))
.answer(Answer.builder().value(of("123343430mmmj")).build()).build();
return QuestionnaireResponse.builder().status(QuestionnaireResponseStatus.COMPLETED)
.subject(Reference.builder().reference(of("098787kml-jsks09")).build()).item(structureType, businessStatus)
.subject(Reference.builder().reference(of("098787kml-jsks09")).build()).item(structureType, businessStatus,location)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package org.smartregister.pathevaluator.plan;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
Expand Down Expand Up @@ -34,6 +35,7 @@
import org.smartregister.pathevaluator.trigger.TriggerHelper;

import com.ibm.fhir.model.resource.Patient;
import com.ibm.fhir.model.resource.QuestionnaireResponse;

/**
* @author Samuel Githengi created on 06/15/20
Expand Down Expand Up @@ -78,7 +80,7 @@ public void testEvaluatePlanForInactivePlan() {
}

@Test
public void testEvaluatePlanEvaluatesCondtions() {
public void testEvaluatePlanEvaluatesConditions() {
PlanDefinition planDefinition = TestData.createPlan();
planDefinition.setIdentifier(plan);
planDefinition.setStatus(PlanStatus.ACTIVE);
Expand Down Expand Up @@ -109,4 +111,38 @@ public List<Patient> answer(InvocationOnMock invocation) throws Throwable {
username);
}

@Test
public void testEvaluatePlanWithQuestionnaireEvaluatesConditions() {
PlanDefinition planDefinition = TestData.createPlan();
planDefinition.setIdentifier(plan);
planDefinition.setStatus(PlanStatus.ACTIVE);

QuestionnaireResponse questionnaire = TestData.createResponse();
List<Patient> patients = Collections.singletonList(TestData.createPatient());
Action action = planDefinition.getActions().get(0);
String entity = questionnaire.getSubject().getReference().getValue();
when(actionHelper.getSubjectResources(action, entity)).thenAnswer(new Answer<List<Patient>>() {

@Override
public List<Patient> answer(InvocationOnMock invocation) throws Throwable {
return patients;
}
});
when(conditionHelper.evaluateActionConditions(patients.get(0), action, plan, TriggerType.EVENT_SUBMISSION))
.thenReturn(true);
when(triggerHelper.evaluateTrigger(eq(action.getTrigger()), eq(TriggerType.EVENT_SUBMISSION), eq(plan),
any(QuestionnaireResponse.class))).thenReturn(true);

planEvaluator.evaluatePlan(planDefinition, questionnaire);
int evaluations = planDefinition.getActions().size() * planDefinition.getJurisdiction().size();
verify(triggerHelper, times(evaluations)).evaluateTrigger(action.getTrigger(), TriggerType.EVENT_SUBMISSION, plan,
questionnaire);
verify(actionHelper).getSubjectResources(action, "098787kml-jsks09");

verify(conditionHelper).evaluateActionConditions(patients.get(0), action, plan, TriggerType.EVENT_SUBMISSION);

verify(taskHelper).generateTask(patients.get(0), action, planDefinition.getIdentifier(), "123343430mmmj", username);

}

}

0 comments on commit 3cd5cae

Please sign in to comment.