Add test for #1999

This commit is contained in:
jamesagnew 2020-07-25 15:17:12 -04:00
parent ff1d5221b5
commit c6769ef075
1 changed files with 97 additions and 0 deletions

View File

@ -7,11 +7,15 @@ import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IPrimitiveType; import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.hl7.fhir.r4.model.CodeType; import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.IntegerType; import org.hl7.fhir.r4.model.IntegerType;
import org.hl7.fhir.r4.model.Parameters; import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.Patient; import org.hl7.fhir.r4.model.Patient;
import org.hl7.fhir.r4.model.Questionnaire;
import org.hl7.fhir.r4.model.StringType; import org.hl7.fhir.r4.model.StringType;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -21,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class FhirPatchApplyR4Test { public class FhirPatchApplyR4Test {
private static final FhirContext ourCtx = FhirContext.forCached(FhirVersionEnum.R4); private static final FhirContext ourCtx = FhirContext.forCached(FhirVersionEnum.R4);
private static final Logger ourLog = LoggerFactory.getLogger(FhirPatchApplyR4Test.class);
@Test @Test
public void testInvalidOperation() { public void testInvalidOperation() {
@ -166,6 +171,98 @@ public class FhirPatchApplyR4Test {
} }
/**
* See #1999
*/
@Test
public void testInsertToNonZeroIndex() {
FhirPatch svc = new FhirPatch(ourCtx);
Questionnaire patient = new Questionnaire();
Questionnaire.QuestionnaireItemComponent item = patient.addItem();
item.setLinkId("1");
item.addCode().setSystem("https://smilecdr.com/fhir/document-type").setCode("CLINICAL");
item.setText("Test item");
Parameters.ParametersParameterComponent operation;
Parameters patch = new Parameters();
operation = patch.addParameter();
operation.setName("operation");
operation
.addPart()
.setName("type")
.setValue(new CodeType("insert"));
operation
.addPart()
.setName("path")
.setValue(new StringType("Questionnaire.item"));
operation
.addPart()
.setName("index")
.setValue(new IntegerType(1));
operation = patch.addParameter();
operation.setName("operation");
operation
.addPart()
.setName("type")
.setValue(new CodeType("insert"));
operation
.addPart()
.setName("path")
.setValue(new StringType("Questionnaire.item[1].linkId"));
operation
.addPart()
.setName("index")
.setValue(new IntegerType(0));
operation
.addPart()
.setName("value")
.setValue(new StringType("2"));
operation = patch.addParameter();
operation.setName("operation");
operation
.addPart()
.setName("type")
.setValue(new CodeType("insert"));
operation
.addPart()
.setName("path")
.setValue(new StringType("Questionnaire.item[1].code"));
operation
.addPart()
.setName("index")
.setValue(new IntegerType(0));
operation
.addPart()
.setName("value")
.setValue(new Coding("http://smilecdr.com/fhir/document-type", "ADMIN", null));
operation = patch.addParameter();
operation.setName("operation");
operation
.addPart()
.setName("type")
.setValue(new CodeType("insert"));
operation
.addPart()
.setName("path")
.setValue(new StringType("Questionnaire.item[1].text"));
operation
.addPart()
.setName("index")
.setValue(new IntegerType(0));
operation
.addPart()
.setName("value")
.setValue(new StringType("Test Item 2"));
svc.apply(patient, patch);
ourLog.info("Outcome:\n{}", ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(patient));
assertEquals("{\"resourceType\":\"Questionnaire\",\"item\":[{\"linkId\":\"1\",\"code\":[{\"system\":\"https://smilecdr.com/fhir/document-type\",\"code\":\"CLINICAL\"}],\"text\":\"Test item\"},{\"linkId\":\"2\",\"code\":[{\"system\":\"http://smilecdr.com/fhir/document-type\",\"code\":\"ADMIN\"}],\"text\":\"Test Item 2\"}]}", ourCtx.newJsonParser().encodeResourceToString(patient));
}
public static String extractPartValuePrimitive(Parameters theDiff, int theIndex, String theParameterName, String thePartName) { public static String extractPartValuePrimitive(Parameters theDiff, int theIndex, String theParameterName, String thePartName) {
Parameters.ParametersParameterComponent component = theDiff.getParameter().stream().filter(t -> t.getName().equals(theParameterName)).collect(Collectors.toList()).get(theIndex); Parameters.ParametersParameterComponent component = theDiff.getParameter().stream().filter(t -> t.getName().equals(theParameterName)).collect(Collectors.toList()).get(theIndex);
Parameters.ParametersParameterComponent part = component.getPart().stream().filter(t -> t.getName().equals(thePartName)).findFirst().orElseThrow(() -> new IllegalArgumentException()); Parameters.ParametersParameterComponent part = component.getPart().stream().filter(t -> t.getName().equals(thePartName)).findFirst().orElseThrow(() -> new IllegalArgumentException());