Merge 7a35d49980
into 061390d76b
This commit is contained in:
commit
b0ed8910a1
|
@ -46,6 +46,7 @@ import org.hl7.fhir.r4.model.PrimitiveType;
|
|||
import org.hl7.fhir.r4.model.Quantity;
|
||||
import org.hl7.fhir.r4.model.QuestionnaireResponse;
|
||||
import org.hl7.fhir.r4.model.Reference;
|
||||
import org.hl7.fhir.r4.model.Resource;
|
||||
import org.hl7.fhir.r4.model.Specimen;
|
||||
import org.hl7.fhir.r4.model.StringType;
|
||||
import org.hl7.fhir.r4.model.Type;
|
||||
|
@ -1379,6 +1380,124 @@ public class JsonParserR4Test extends BaseTest {
|
|||
assertThat(patientString).doesNotContain("fhir_comment");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContainedResourceIdIsReadWithoutAddingHash() throws IOException {
|
||||
String text = loadResource("/observation-with-contained-specimen.json");
|
||||
|
||||
Observation observation = ourCtx.newJsonParser().parseResource(Observation.class, text);
|
||||
assertThat(observation.getSpecimen().getReference()).isEqualTo("#contained-id");
|
||||
//FIXME the parsed resource has an added `#` in the contained resource id.
|
||||
assertThat(observation.getContained().get(0).getId()).isEqualTo("contained-id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContainedResourceIdIsReadWithoutAddingHashThatAlreadyExists() throws IOException {
|
||||
String text = loadResource("/observation-with-contained-specimen-hash-id.json");
|
||||
|
||||
Observation observation = ourCtx.newJsonParser().parseResource(Observation.class, text);
|
||||
// FIXME? This shouldn't be a valid resource, but it's loaded and made into `##contained-id` anyway.
|
||||
assertThat(observation.getSpecimen().getReference()).isEqualTo("#contained-id");
|
||||
assertThat(observation.getContained().get(0).getId()).isEqualTo("#contained-id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReferenceCreatedByStringDoesntMutateContained() {
|
||||
Observation observation = new Observation();
|
||||
observation.setId("123");
|
||||
Specimen specimen = new Specimen();
|
||||
specimen.setId("contained-id");
|
||||
observation.getContained().add(specimen);
|
||||
observation.setSpecimen(new Reference("#contained-id"));
|
||||
|
||||
String text = ourCtx.newJsonParser().encodeResourceToString(observation);
|
||||
|
||||
assertThat(text).contains("\"reference\":\"#contained-id\"");
|
||||
assertThat(text).contains("\"id\":\"contained-id\"");
|
||||
|
||||
assertThat(observation.getContained().size()).isEqualTo(1);
|
||||
/*FIXME despite correctly encoding the contained resource, the original contained resource is mutated and given
|
||||
an id prefixed with a hash.
|
||||
*/
|
||||
assertThat(observation.getContained().get(0).getId()).isEqualTo("contained-id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReferenceCreatedByResourceDoesntMutateContained() {
|
||||
|
||||
Specimen specimen = new Specimen();
|
||||
specimen.setId("contained-id");
|
||||
|
||||
Observation observation = new Observation();
|
||||
observation.setId("123");
|
||||
observation.getContained().add(specimen);
|
||||
observation.setSpecimen(new Reference(specimen));
|
||||
|
||||
String text = ourCtx.newJsonParser().encodeResourceToString(observation);
|
||||
|
||||
assertThat(text).contains("\"reference\":\"#contained-id\"");
|
||||
assertThat(text).contains("\"id\":\"contained-id\"");
|
||||
|
||||
assertThat(observation.getContained().size()).isEqualTo(1);
|
||||
/*FIXME despite correctly encoding the contained resource, the original contained resource is mutated and given
|
||||
an id prefixed with a hash.
|
||||
*/
|
||||
assertThat(observation.getContained().get(0).getId()).isEqualTo("contained-id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReferenceCreatedByResourceDoesntMutateEmptyContained() {
|
||||
Specimen specimen = new Specimen();
|
||||
specimen.setReceivedTimeElement(new DateTimeType("2011-01-01"));
|
||||
|
||||
Observation observation = new Observation();
|
||||
observation.setId("O1");
|
||||
observation.setStatus(Observation.ObservationStatus.FINAL);
|
||||
observation.setSpecimen(new Reference(specimen));
|
||||
|
||||
String text = ourCtx.newJsonParser().encodeResourceToString(observation);
|
||||
|
||||
// When encoding, if the reference does not have an id, it is generated in the FhirTerser
|
||||
String specimenReferenceId = observation.getSpecimen().getResource().getIdElement().getValue();
|
||||
assertThat(specimenReferenceId).startsWith("#");
|
||||
|
||||
// the terser doesn't add a new contained element to the observation
|
||||
assertThat(observation.getContained()).isEmpty();
|
||||
|
||||
// However the encoded text contains both a single contained resource, as well as the reference to it.
|
||||
assertThat(text).contains("\"reference\":\""+specimenReferenceId+"\"");
|
||||
assertThat(text).contains("\"id\":\""+specimenReferenceId.substring(1)+"\"");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testReferenceCreatedByIdTypeDoesntMutateContained() {
|
||||
Specimen specimen = new Specimen();
|
||||
specimen.setId("contained-id");
|
||||
specimen.setReceivedTimeElement(new DateTimeType("2011-01-01"));
|
||||
|
||||
Observation observation = new Observation();
|
||||
observation.setId("O1");
|
||||
observation.setStatus(Observation.ObservationStatus.FINAL);
|
||||
observation.getContained().add(specimen);
|
||||
observation.setSpecimen(new Reference(new IdType("#contained-id")));
|
||||
|
||||
String text = ourCtx.newJsonParser().encodeResourceToString(observation);
|
||||
|
||||
// When encoding,
|
||||
String specimenReferenceId = observation.getSpecimen().getReference();
|
||||
assertThat(specimenReferenceId).startsWith("#");
|
||||
|
||||
// FIXME why does the terser mutate the contained element of the original resource?
|
||||
String specimenContainedId = observation.getContained().get(0).getIdElement().getValue();
|
||||
assertThat(specimenContainedId).isEqualTo("contained-id");
|
||||
|
||||
// However the encoded text contains both a single contained resource, as well as the reference to it.
|
||||
assertThat(text).contains("\"reference\":\""+specimenReferenceId+"\"");
|
||||
assertThat(text).contains("\"id\":\""+specimenReferenceId.substring(1)+"\"");
|
||||
|
||||
}
|
||||
|
||||
@DatatypeDef(
|
||||
name = "UnknownPrimitiveType"
|
||||
)
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"resourceType": "Observation",
|
||||
"id": "O1",
|
||||
"contained": [
|
||||
{
|
||||
"resourceType": "Specimen",
|
||||
"id": "#contained-id"
|
||||
}
|
||||
],
|
||||
"status": "final",
|
||||
"specimen": {
|
||||
"reference": "#contained-id"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"resourceType": "Observation",
|
||||
"id": "O1",
|
||||
"contained": [
|
||||
{
|
||||
"resourceType": "Specimen",
|
||||
"id": "contained-id"
|
||||
}
|
||||
],
|
||||
"status": "final",
|
||||
"specimen": {
|
||||
"reference": "#contained-id"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue