package ca.uhn.fhir.model.primitive; import static org.junit.Assert.*; import java.math.BigDecimal; import org.apache.commons.lang3.StringUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.model.dstu.composite.ResourceReferenceDt; import ca.uhn.fhir.model.dstu.resource.Patient; import ca.uhn.fhir.util.TestUtil; public class IdDtTest { private static FhirContext ourCtx; private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(IdDtTest.class); @Test public void testUuid() { IdDt id = new IdDt("urn:uuid:1234-5678"); assertEquals("urn:uuid:1234-5678", id.getValueAsString()); assertEquals("urn:uuid:1234-5678", id.getIdPart()); assertEquals("urn:uuid:1234-5678", id.toUnqualified().getValueAsString()); assertEquals("urn:uuid:1234-5678", id.toUnqualifiedVersionless().getValueAsString()); assertEquals(null, id.getVersionIdPart()); assertEquals(null, id.getResourceType()); assertEquals(null, id.getBaseUrl()); assertEquals("urn:uuid:1234-5678", id.withResourceType("Patient").getValue()); assertEquals("urn:uuid:1234-5678", id.withServerBase("http://foo", "Patient").getValue()); assertEquals("urn:uuid:1234-5678", id.withVersion("2").getValue()); } @Test public void testOid() { IdDt id = new IdDt("urn:oid:1.2.3.4"); assertEquals("urn:oid:1.2.3.4", id.getValueAsString()); assertEquals("urn:oid:1.2.3.4", id.getIdPart()); assertEquals("urn:oid:1.2.3.4", id.toUnqualified().getValueAsString()); assertEquals("urn:oid:1.2.3.4", id.toUnqualifiedVersionless().getValueAsString()); assertEquals(null, id.getVersionIdPart()); assertEquals(null, id.getResourceType()); assertEquals(null, id.getBaseUrl()); assertEquals("urn:oid:1.2.3.4", id.withResourceType("Patient").getValue()); assertEquals("urn:oid:1.2.3.4", id.withServerBase("http://foo", "Patient").getValue()); assertEquals("urn:oid:1.2.3.4", id.withVersion("2").getValue()); } @Test public void testLocal() { IdDt id = new IdDt("#foo"); assertEquals("#foo", id.getValueAsString()); assertEquals("#foo", id.getIdPart()); assertEquals("#foo", id.toUnqualified().getValueAsString()); assertEquals("#foo", id.toUnqualifiedVersionless().getValueAsString()); assertEquals(null, id.getVersionIdPart()); assertEquals(null, id.getResourceType()); assertEquals(null, id.getBaseUrl()); assertEquals("#foo", id.withResourceType("Patient").getValue()); assertEquals("#foo", id.withServerBase("http://foo", "Patient").getValue()); assertEquals("#foo", id.withVersion("2").getValue()); } @Test public void testNormal() { IdDt id = new IdDt("foo"); assertEquals("foo", id.getValueAsString()); assertEquals("foo", id.getIdPart()); assertEquals("foo", id.toUnqualified().getValueAsString()); assertEquals("foo", id.toUnqualifiedVersionless().getValueAsString()); assertEquals(null, id.getVersionIdPart()); assertEquals(null, id.getResourceType()); assertEquals(null, id.getBaseUrl()); assertEquals("Patient/foo", id.withResourceType("Patient").getValue()); assertEquals("http://foo/Patient/foo", id.withServerBase("http://foo", "Patient").getValue()); assertEquals("foo/_history/2", id.withVersion("2").getValue()); } @Test public void testDetectIsIdPartValid() { assertTrue(new IdDt("0").isIdPartValid()); assertTrue(new IdDt("0a").isIdPartValid()); assertTrue(new IdDt("0abgZZ").isIdPartValid()); assertTrue(new IdDt("---").isIdPartValid()); assertTrue(new IdDt("1.2.3.4").isIdPartValid()); assertFalse(new IdDt(" 1").isIdPartValid()); assertFalse(new IdDt("1:1").isIdPartValid()); assertFalse(new IdDt(StringUtils.leftPad("", 65, '0')).isIdPartValid()); } @Test public void testConstructorsWithNullArguments() { IdDt id = new IdDt(null, null, null); assertEquals(null, id.getValue()); } @Test public void testDetectLocal() { IdDt id; id = new IdDt("#123"); assertEquals("#123", id.getValue()); assertEquals("#123", id.toUnqualifiedVersionless().getValue()); assertTrue(id.isLocal()); id = new IdDt("#Medication/499059CE-CDD4-48BC-9014-528A35D15CED/_history/1"); assertEquals("#Medication/499059CE-CDD4-48BC-9014-528A35D15CED/_history/1", id.getValue()); assertTrue(id.isLocal()); id = new IdDt("http://example.com/Patient/33#123"); assertEquals("http://example.com/Patient/33#123", id.getValue()); assertFalse(id.isLocal()); } @Test public void testDetectLocalBase() { assertEquals("urn:uuid:180f219f-97a8-486d-99d9-ed631fe4fc57", new IdDt("urn:uuid:180f219f-97a8-486d-99d9-ed631fe4fc57").getValue()); assertEquals(null, new IdDt("urn:uuid:180f219f-97a8-486d-99d9-ed631fe4fc57").getBaseUrl()); assertEquals("urn:uuid:180f219f-97a8-486d-99d9-ed631fe4fc57", new IdDt("urn:uuid:180f219f-97a8-486d-99d9-ed631fe4fc57").getIdPart()); assertEquals("cid:180f219f-97a8-486d-99d9-ed631fe4fc57", new IdDt("cid:180f219f-97a8-486d-99d9-ed631fe4fc57").getValue()); assertEquals(null, new IdDt("cid:180f219f-97a8-486d-99d9-ed631fe4fc57").getBaseUrl()); assertEquals("cid:180f219f-97a8-486d-99d9-ed631fe4fc57", new IdDt("cid:180f219f-97a8-486d-99d9-ed631fe4fc57").getIdPart()); assertEquals("#180f219f-97a8-486d-99d9-ed631fe4fc57", new IdDt("#180f219f-97a8-486d-99d9-ed631fe4fc57").getValue()); assertEquals(null, new IdDt("#180f219f-97a8-486d-99d9-ed631fe4fc57").getBaseUrl()); assertEquals("#180f219f-97a8-486d-99d9-ed631fe4fc57", new IdDt("#180f219f-97a8-486d-99d9-ed631fe4fc57").getIdPart()); } /** * See #67 */ @Test public void testComplicatedLocal() { IdDt id = new IdDt("#Patient/cid:Patient-72/_history/1"); assertTrue(id.isLocal()); assertEquals(null, id.getBaseUrl()); assertNull(id.getResourceType()); assertNull(id.getVersionIdPart()); assertEquals("#Patient/cid:Patient-72/_history/1", id.getIdPart()); } @Test public void testDetermineBase() { IdDt rr; rr = new IdDt("http://foo/fhir/Organization/123"); assertEquals("http://foo/fhir", rr.getBaseUrl()); rr = new IdDt("http://foo/fhir/Organization/123/_history/123"); assertEquals("http://foo/fhir", rr.getBaseUrl()); rr = new IdDt("Organization/123/_history/123"); assertEquals(null, rr.getBaseUrl()); } @Test public void testParseValueAbsolute() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("http://foo/fhir/Organization/123"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals("Organization", ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); } @Test public void testBigDecimalIds() { IdDt id = new IdDt(new BigDecimal("123")); assertEquals(id.getIdPartAsBigDecimal(), new BigDecimal("123")); } @Test public void testParseValueAbsoluteWithVersion() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("http://foo/fhir/Organization/123/_history/999"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals("Organization", ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); assertEquals(null, ref.getReference().getVersionIdPart()); } @Test public void testViewMethods() { IdDt i = new IdDt("http://foo/fhir/Organization/123/_history/999"); assertEquals("Organization/123/_history/999", i.toUnqualified().getValue()); assertEquals("http://foo/fhir/Organization/123", i.toVersionless().getValue()); assertEquals("Organization/123", i.toUnqualifiedVersionless().getValue()); } @Test public void testParseValueWithVersion() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("/123/_history/999"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals(null, ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); assertEquals(null, ref.getReference().getVersionIdPart()); } @Test public void testParseValueMissingType1() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("/123"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals(null, ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); } @Test public void testParseValueMissingType2() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("123"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals(null, ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); } @Test public void testParseValueRelative1() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("Organization/123"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals("Organization", ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); } @Test public void testParseValueRelative2() { Patient patient = new Patient(); IdDt rr = new IdDt(); rr.setValue("/Organization/123"); patient.setManagingOrganization(new ResourceReferenceDt(rr)); Patient actual = parseAndEncode(patient); ResourceReferenceDt ref = actual.getManagingOrganization(); assertEquals("Organization", ref.getReference().getResourceType()); assertEquals("123", ref.getReference().getIdPart()); } private Patient parseAndEncode(Patient patient) { String encoded = ourCtx.newXmlParser().encodeResourceToString(patient); ourLog.info("\n" + encoded); return ourCtx.newXmlParser().parseResource(Patient.class, encoded); } @BeforeClass public static void beforeClass() { ourCtx = FhirContext.forDstu1(); } @AfterClass public static void afterClassClearContext() { TestUtil.clearAllStaticFieldsForUnitTest(); } }