Skip to content

Commit

Permalink
Merge pull request #28 from OpenSRP/26-unit-tests-converters
Browse files Browse the repository at this point in the history
Added assertions on converters unit tests
  • Loading branch information
githengi committed Jun 22, 2020
2 parents c1ecf97 + d956e03 commit 678eab6
Show file tree
Hide file tree
Showing 7 changed files with 222 additions and 32 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<artifactId>opensrp-plan-evaluator</artifactId>
<packaging>jar</packaging>
<version>0.0.7-SNAPSHOT</version>
<version>0.0.8-SNAPSHOT</version>
<name>OpenSRP Plan Evaluator</name>
<description>OpenSRP Plan Evaluator Library</description>
<url>https://github.com/OpenSRP/opensrp-plan-evaluator</url>
Expand Down
19 changes: 13 additions & 6 deletions src/main/java/org/smartregister/converters/EventConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public static QuestionnaireResponse convertEventToEncounterResource(Event event)
Id versionId = Id.builder().value(version).build();
Meta meta = Meta.builder().versionId(versionId).build();

QuestionnaireResponse.Item.Answer answer;
QuestionnaireResponse.Item.Answer answer = null;
QuestionnaireResponse.Item item;

if (event.getIdentifiers() != null) {
Expand Down Expand Up @@ -81,14 +81,21 @@ public static QuestionnaireResponse convertEventToEncounterResource(Event event)
Collection<Extension> extensions = new ArrayList<>();
if (event.getObs() != null) {
for (Obs obs : event.getObs()) {
extensions = new ArrayList<>();
for (Object obj : obs.getValues()) {
if (obj instanceof java.lang.String) {
extension = Extension.builder().value(String.builder().value(obj.toString()).build())
.url("observation").build();
extensions.add(extension);
if (obs.getValues().size() == 1 && obj instanceof java.lang.String) {
answer = QuestionnaireResponse.Item.Answer.builder()
.value(String.builder().value(obj.toString()).build()).build();
} else {
if (obj instanceof java.lang.String) {
extension = Extension.builder().value(String.builder().value(obj.toString()).build())
.url("observation").build();
extensions.add(extension);
}
answer = QuestionnaireResponse.Item.Answer.builder().extension(extensions).build();
}
}
answer = QuestionnaireResponse.Item.Answer.builder().extension(extensions).build();

item = QuestionnaireResponse.Item.builder().linkId(String.builder().value(obs.getFieldCode()).build())
.answer(answer).build();
items.add(item);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@

import com.ibm.fhir.model.resource.Resource;
import com.ibm.fhir.path.FHIRPathBooleanValue;
import com.ibm.fhir.path.FHIRPathElementNode;
import com.ibm.fhir.path.FHIRPathNode;
import com.ibm.fhir.path.evaluator.FHIRPathEvaluator;
import com.ibm.fhir.path.exception.FHIRPathException;

import lombok.Getter;

Expand Down Expand Up @@ -60,15 +62,38 @@ public static PathEvaluatorLibrary getInstance() {
return instance;
}

/**
* Evaluates a boolean FHIR Path expression on a resource
* @param resource the resource expression is being evaluated on
* @param expression the expression to evaluate
* @return results of expression or false if the expression is not valid
*/
public boolean evaluateBooleanExpression(Resource resource, String expression) {

try {
Collection<FHIRPathNode> nodes = fhirPathEvaluator.evaluate(resource, expression);
return nodes != null ? nodes.iterator().next().as(FHIRPathBooleanValue.class)._boolean() : false;
}
catch (Exception e) {
catch (FHIRPathException e) {
return false;
}
}

/**
* Evaluates a FHIR Path expression on a resource
* @param resource the resource expression is being evaluated on
* @param expression the expression to evaluate
* @return results of expression
*/
public FHIRPathElementNode evaluateElementExpression(Resource resource, String expression) {

try {
return fhirPathEvaluator.evaluate(resource, expression).iterator().next().asElementNode();
}
catch (FHIRPathException e) {
e.printStackTrace();
return null;
}
}

}
47 changes: 36 additions & 11 deletions src/test/java/org/smartregister/converters/ClientConverterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.ibm.fhir.model.resource.Patient;
import com.ibm.fhir.model.type.CodeableConcept;
import com.ibm.fhir.model.type.Identifier;
import com.ibm.fhir.path.FHIRPathElementNode;
import org.joda.time.DateTime;
import org.junit.Test;
import org.smartregister.domain.Client;
import org.smartregister.pathevaluator.PathEvaluatorLibrary;
import org.smartregister.utils.TaskDateTimeTypeConverter;

import static org.junit.Assert.assertEquals;
Expand All @@ -21,19 +25,40 @@ public class ClientConverterTest {
@Test
public void testConvertToPatientResource() {
Client client = gson.fromJson(CLIENT_JSON, Client.class);
client.setBirthdate(new DateTime(0l));
client.setDeathdate(new DateTime(0l));
client.setFirstName("John");
client.setMiddleName("Lewis");
client.setLastName("Johny");
client.setGender("male");
client.setBirthdate(new DateTime(0l));
client.setDeathdate(new DateTime(0l));
client.setFirstName("John");
client.setMiddleName("Lewis");
client.setLastName("Johny");
client.setGender("male");
Patient patient = ClientConverter.convertClientToPatientResource(client);
assertNotNull(patient);
assertEquals(patient.getGender().getValueAsEnumConstant().value(),client.getGender());
assertEquals(patient.getName().get(0).getFamily().getValue(),client.getLastName());
assertEquals(patient.getName().get(0).getText().getValue(),client.fullName());
assertEquals(patient.getId(),client.getBaseEntityId());
//TODO : Add assertion on remaining properties
assertEquals(client.getGender(), patient.getGender().getValueAsEnumConstant().value());
assertEquals(client.getLastName(), patient.getName().get(0).getFamily().getValue());
assertEquals(client.fullName(), patient.getName().get(0).getText().getValue());
assertEquals(client.getBaseEntityId(), patient.getId());
int identifiersSize = client.getRelationships().entrySet().size() + client.getAttributes().entrySet().size() + client
.getIdentifiers().entrySet().size();
assertEquals(identifiersSize, patient.getIdentifier().size());
assertEquals(client.getBirthdate().toString("YYYY-MM-DD"), patient.getBirthDate().getValue().toString());
assertEquals(client.getDeathdate().toString("yyyy-MM-dd'T'HH:mm'Z'"),
patient.getDeceased().as(com.ibm.fhir.model.type.DateTime.class).getValue().toString());
PathEvaluatorLibrary.init(null, null, null,null);
FHIRPathElementNode node = PathEvaluatorLibrary.getInstance().evaluateElementExpression(patient, "Patient.identifier.where(system='opensrp_id')");
Identifier identifierNode = node.element().as(Identifier.class);
assertEquals("20366639", identifierNode.getValue().getValue());

node = PathEvaluatorLibrary.getInstance().evaluateElementExpression(patient, "Patient.identifier.type.where(text='family')");
CodeableConcept familyNode = node.element().as(CodeableConcept.class);
assertEquals(1, familyNode.getCoding().get(0).getExtension().size());
assertEquals("e6d3ea63-1309-4302-bd93-a6d0571cc645", familyNode.getCoding().get(0).getExtension().get(0).getValue().as(com.ibm.fhir.model.type.String.class).getValue());

node = PathEvaluatorLibrary.getInstance().evaluateElementExpression(patient, "Patient.identifier.where(id='residence')");
Identifier residenceIdentifier = node.element().as(Identifier.class);
assertEquals("residence", residenceIdentifier.getId());
assertEquals("40930448-ea84-4ba7-8780-2a98dd8e902e", residenceIdentifier.getValue().getValue());
assertEquals("attribute", residenceIdentifier.getType().getCoding().get(0).getCode().getValue());

System.out.println(patient);
}
}
Loading

0 comments on commit 678eab6

Please sign in to comment.