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; } }