package ca.uhn.fhir.model.view; import static org.junit.Assert.*; import java.util.List; import org.junit.AfterClass; import org.junit.Test; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.model.api.ExtensionDt; import ca.uhn.fhir.model.dstu.resource.Patient; import ca.uhn.fhir.model.primitive.IntegerDt; import ca.uhn.fhir.parser.IParser; import ca.uhn.fhir.util.TestUtil; public class ViewGeneratorTest { private static FhirContext ourCtx = FhirContext.forDstu1(); private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ViewGeneratorTest.class); @Test public void testView() { ExtPatient src = new ExtPatient(); src.addIdentifier("urn:sys", "id1"); src.addIdentifier("urn:sys", "id2"); src.getExt().setValue(100); src.getModExt().setValue(200); String enc = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(src); ourLog.info(enc); IParser parser = ourCtx.newXmlParser(); Patient nonExt = parser.parseResource(Patient.class, enc); assertEquals(Patient.class, nonExt.getClass()); assertEquals("urn:sys", nonExt.getIdentifier().get(0).getSystem().getValueAsString()); assertEquals("id1", nonExt.getIdentifier().get(0).getValue().getValue()); assertEquals("urn:sys", nonExt.getIdentifier().get(1).getSystem().getValueAsString()); assertEquals("id2", nonExt.getIdentifier().get(1).getValue().getValueAsString()); List<ExtensionDt> ext = nonExt.getUndeclaredExtensionsByUrl("urn:ext"); assertEquals(1,ext.size()); assertEquals("urn:ext", ext.get(0).getUrlAsString()); assertEquals(IntegerDt.class, ext.get(0).getValueAsPrimitive().getClass()); assertEquals("100", ext.get(0).getValueAsPrimitive().getValueAsString()); List<ExtensionDt> modExt = nonExt.getUndeclaredExtensionsByUrl("urn:modExt"); assertEquals(1,modExt.size()); assertEquals("urn:modExt", modExt.get(0).getUrlAsString()); assertEquals(IntegerDt.class, modExt.get(0).getValueAsPrimitive().getClass()); assertEquals("200", modExt.get(0).getValueAsPrimitive().getValueAsString()); ExtPatient va = ourCtx.newViewGenerator().newView(nonExt, ExtPatient.class); assertEquals("urn:sys", va.getIdentifier().get(0).getSystem().getValueAsString()); assertEquals("id1", va.getIdentifier().get(0).getValue().getValue()); assertEquals("urn:sys", va.getIdentifier().get(1).getSystem().getValueAsString()); assertEquals("id2", va.getIdentifier().get(1).getValue().getValueAsString()); assertEquals(100, va.getExt().getValue().intValue()); assertEquals(200, va.getModExt().getValue().intValue()); assertEquals(0, va.getAllUndeclaredExtensions().size()); } @Test public void testViewJson() { ExtPatient src = new ExtPatient(); src.addIdentifier("urn:sys", "id1"); src.addIdentifier("urn:sys", "id2"); src.getExt().setValue(100); src.getModExt().setValue(200); String enc = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(src); ourLog.info(enc); IParser parser = ourCtx.newJsonParser(); Patient nonExt = parser.parseResource(Patient.class, enc); assertEquals(Patient.class, nonExt.getClass()); assertEquals("urn:sys", nonExt.getIdentifier().get(0).getSystem().getValueAsString()); assertEquals("id1", nonExt.getIdentifier().get(0).getValue().getValue()); assertEquals("urn:sys", nonExt.getIdentifier().get(1).getSystem().getValueAsString()); assertEquals("id2", nonExt.getIdentifier().get(1).getValue().getValueAsString()); List<ExtensionDt> ext = nonExt.getUndeclaredExtensionsByUrl("urn:ext"); assertEquals(1,ext.size()); assertEquals("urn:ext", ext.get(0).getUrlAsString()); assertEquals(IntegerDt.class, ext.get(0).getValueAsPrimitive().getClass()); assertEquals("100", ext.get(0).getValueAsPrimitive().getValueAsString()); List<ExtensionDt> modExt = nonExt.getUndeclaredExtensionsByUrl("urn:modExt"); assertEquals(1,modExt.size()); assertEquals("urn:modExt", modExt.get(0).getUrlAsString()); assertEquals(IntegerDt.class, modExt.get(0).getValueAsPrimitive().getClass()); assertEquals("200", modExt.get(0).getValueAsPrimitive().getValueAsString()); ExtPatient va = ourCtx.newViewGenerator().newView(nonExt, ExtPatient.class); assertEquals("urn:sys", va.getIdentifier().get(0).getSystem().getValueAsString()); assertEquals("id1", va.getIdentifier().get(0).getValue().getValue()); assertEquals("urn:sys", va.getIdentifier().get(1).getSystem().getValueAsString()); assertEquals("id2", va.getIdentifier().get(1).getValue().getValueAsString()); assertEquals(100, va.getExt().getValue().intValue()); assertEquals(200, va.getModExt().getValue().intValue()); assertEquals(0, va.getAllUndeclaredExtensions().size()); } @AfterClass public static void afterClassClearContext() { TestUtil.clearAllStaticFieldsForUnitTest(); } }