public void TestBucketAssignment() { var s = createSliceDefs() as SliceGroupBucket; var p = new Patient(); p.Telecom.Add(new ContactPoint { System = ContactPoint.ContactPointSystem.Phone, Use = ContactPoint.ContactPointUse.Home, Value = "+31-6-39015765" }); p.Telecom.Add(new ContactPoint { System = ContactPoint.ContactPointSystem.Email, Use = ContactPoint.ContactPointUse.Work, Value = "*****@*****.**" }); p.Telecom.Add(new ContactPoint { System = ContactPoint.ContactPointSystem.Other, Use = ContactPoint.ContactPointUse.Temp, Value = "skype://crap" }); p.Telecom.Add(new ContactPoint { System = ContactPoint.ContactPointSystem.Other, Use = ContactPoint.ContactPointUse.Home, Value = "http://nu.nl" }); p.Telecom.Add(new ContactPoint { System = ContactPoint.ContactPointSystem.Fax, Use = ContactPoint.ContactPointUse.Work, Value = "+31-20-6707070" }); var pnav = new PocoNavigator(p) as IElementNavigator; var telecoms = pnav.GetChildrenByName("telecom"); foreach (var telecom in telecoms) { Assert.True(s.Add(telecom)); } var outcome = s.Validate(_validator, pnav); Assert.True(outcome.Success); Assert.Equal(0, outcome.Warnings); Assert.Equal("+31-6-39015765", s.ChildSlices[0].Members.Single().Values("value").Single()); var emailBucket = s.ChildSlices[1] as SliceGroupBucket; Assert.Equal("*****@*****.**", emailBucket.Members.Single().Values("value").Single()); Assert.False(emailBucket.ChildSlices[0].Members.Any()); Assert.Equal("*****@*****.**", emailBucket.ChildSlices[1].Members.Single().Values("value").Single()); var otherBucket = s.ChildSlices[2] as SliceGroupBucket; Assert.Equal("http://nu.nl", otherBucket.ChildSlices[0].Members.Single().Values("value").Single()); Assert.False(otherBucket.ChildSlices[1].Members.Any()); Assert.Equal("skype://crap", otherBucket.Members.First().Values("value").Single()); // in the open slice - find it on other bucket, not child Assert.Equal("+31-20-6707070", s.Members.Last().Values("value").Single()); // in the open-at-end slice }
public void BuildScopeList() { var bundleXml = File.ReadAllText("TestData\\validation\\bundle-contained-references.xml"); var bundle = (new FhirXmlParser()).Parse <Bundle>(bundleXml); Assert.IsNotNull(bundle); IElementNavigator cpNav = new PocoNavigator(bundle); var tracker = new ScopeTracker(); tracker.Enter(cpNav); var entries = cpNav.GetChildrenByName("entry").GetChildrenByName("resource"); int index = 0; foreach (var entry in entries) { tracker.Enter(entry); if (index == 6) { var orgX = entry.GetChildrenByName("contained").First(); tracker.Enter(orgX); Assert.AreEqual("http://example.org/fhir/Patient/e", tracker.ContextFullUrl(orgX)); Assert.AreEqual("Bundle.entry[6].resource[0].contained[0]", tracker.ResourceContext(orgX).Path); tracker.Leave(orgX); var careProvRef = entry.GetChildrenByName("managingOrganization").GetChildrenByName("reference").Single(); Assert.AreEqual("Bundle.entry[6].resource[0]", tracker.ResourceContext(careProvRef).Path); tracker.Enter(careProvRef); Assert.AreEqual("Bundle.entry[6].resource[0].contained[1]", tracker.Resolve(careProvRef, "#orgY").Path); Assert.AreEqual("Bundle.entry[2].resource[0]", tracker.Resolve(careProvRef, "http://example.org/fhir/Patient/a").Path); tracker.Leave(careProvRef); } tracker.Leave(entry); index++; } tracker.Leave(cpNav); }
public void TestResolution() { var bundleXml = File.ReadAllText("TestData\\validation\\bundle-contained-references.xml"); var bundle = (new FhirXmlParser()).Parse <Bundle>(bundleXml); Assert.IsNotNull(bundle); IElementNavigator cpNav = new PocoNavigator(bundle); var tracker = new ScopeTracker(); tracker.Enter(cpNav); var entries = cpNav.GetChildrenByName("entry"); var index = 0; foreach (var entry in entries) { tracker.Enter(entry); var resource = entry.GetChildrenByName("resource").First(); tracker.Enter(resource); if (index == 2 || index == 3 || index == 4 || index == 6) { var refr = resource.GetChildrenByName("managingOrganization").GetChildrenByName("reference").First(); var res = tracker.Resolve(refr, refr.Value as string); Assert.IsNotNull(res); } else if (index == 5) { var refr = resource.GetChildrenByName("managingOrganization").GetChildrenByName("reference").First(); var res = tracker.Resolve(refr, refr.Value as string); Assert.IsNull(res); } tracker.Leave(resource); tracker.Leave(entry); index += 1; } }