public void InitializationAndResolution() { var sd = _resolver.FindStructureDefinitionForCoreType(FHIRDefinedType.ValueSet); var assertion = new ProfileAssertion("Patient.name[0]", resolve); assertion.SetInstanceType(FHIRDefinedType.ValueSet); assertion.SetDeclaredType(FHIRDefinedType.ValueSet); assertion.AddStatedProfile("http://hl7.org/fhir/StructureDefinition/shareablevalueset"); Assert.Equal(2, assertion.AllProfiles.Count()); Assert.Equal(2, assertion.AllProfiles.Count(p => p.Status == null)); // status == null is only true for unresolved resources assertion.AddStatedProfile(sd); Assert.Equal(2, assertion.AllProfiles.Count()); // Adding a ValueSet SD that was already there does not increase the profile count Assert.Equal(1, assertion.AllProfiles.Count(p => p.Status == null)); // but now there's 1 unresolved profile less Assert.True(assertion.AllProfiles.Contains(sd)); // the other being the Sd we just added Assert.Equal(sd, assertion.InstanceType); Assert.Equal(sd, assertion.DeclaredType); var outcome = assertion.Resolve(); Assert.True(outcome.Success); Assert.Equal(2, assertion.AllProfiles.Count()); // We should still have 2 distinct SDs Assert.Equal(0, assertion.AllProfiles.Count(p => p.Status == null)); // none remain unresolved Assert.True(assertion.AllProfiles.Contains(sd)); // one still being the Sd we manually added assertion.AddStatedProfile("http://hl7.org/fhir/StructureDefinition/unresolvable"); outcome = assertion.Resolve(); Assert.False(outcome.Success); Assert.Equal(3, assertion.AllProfiles.Count()); // We should still have 3 distinct SDs Assert.Equal(1, assertion.AllProfiles.Count(p => p.Status == null)); // one remains unresolved Assert.True(assertion.AllProfiles.Contains(sd)); // one still being the Sd we manually added }
public void ResourceWithStatedProfiles() { var assertion = new ProfileAssertion("Observation", resolve); assertion.SetDeclaredType(FHIRDefinedType.Observation); Assert.True(assertion.Validate().Success); assertion.AddStatedProfile(ModelInfo.CanonicalUriForFhirCoreType(FHIRDefinedType.Observation)); assertion.AddStatedProfile("http://validationtest.org/fhir/StructureDefinition/WeightHeightObservation"); assertion.AddStatedProfile("http://hl7.org/fhir/StructureDefinition/devicemetricobservation"); var report = assertion.Validate(); Assert.True(report.Success); Assert.Equal(2, assertion.MinimalProfiles.Count()); Assert.Equal(assertion.MinimalProfiles, assertion.StatedProfiles.Skip(1)); assertion.SetDeclaredType(FHIRDefinedType.Procedure); report = assertion.Validate(); Assert.False(report.Success); Assert.Contains("is incompatible with the declared type", report.ToString()); }