Fix some R4B test failures

This commit is contained in:
dotasek 2024-02-26 11:17:35 -05:00
parent 150d78af63
commit cc8a749656
1 changed files with 26 additions and 11 deletions

View File

@ -80,6 +80,7 @@ import org.mockito.stubbing.Answer;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@ -354,7 +355,7 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
ValidationResult result = val.validateWithResult(p); ValidationResult result = val.validateWithResult(p);
List<SingleValidationMessage> all = logResultsAndReturnErrorOnes(result); List<SingleValidationMessage> all = logResultsAndReturnErrorOnes(result);
assertFalse(result.isSuccessful()); assertFalse(result.isSuccessful());
assertEquals("The code 'AA ' is not valid (whitespace rules)", all.get(0).getMessage()); assertEquals("The code 'AA ' is not valid (whitespace rules)", all.get(1).getMessage());
} }
@ -476,6 +477,8 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
*/ */
@Test @Test
public void testValidateDoesntEnforceBestPracticesByDefault() { public void testValidateDoesntEnforceBestPracticesByDefault() {
addValidConcept("http://loinc.org", "1234");
Observation input = new Observation(); Observation input = new Observation();
input.addPerformer(new Reference("Practitioner/124")); input.addPerformer(new Reference("Practitioner/124"));
input.setEffective(new DateTimeType("2023-01-01T11:22:33Z")); input.setEffective(new DateTimeType("2023-01-01T11:22:33Z"));
@ -666,10 +669,12 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
public void testLargeBase64() throws IOException { public void testLargeBase64() throws IOException {
String input = IOUtils.toString(FhirInstanceValidatorR4BTest.class.getResourceAsStream("/r4/diagnosticreport-example-gingival-mass.json"), Constants.CHARSET_UTF8); String input = IOUtils.toString(FhirInstanceValidatorR4BTest.class.getResourceAsStream("/r4/diagnosticreport-example-gingival-mass.json"), Constants.CHARSET_UTF8);
ValidationResult output = myFhirValidator.validateWithResult(input); ValidationResult output = myFhirValidator.validateWithResult(input);
List<SingleValidationMessage> errors = logResultsAndReturnAll(output); List<SingleValidationMessage> messages = logResultsAndReturnAll(output);
assertEquals(2, errors.size()); assertEquals(4, messages.size());
assertThat(errors.get(0).getMessage(), containsString("None of the codings provided are in the value set 'LOINC Diagnostic Report Codes'")); assertThat(messages.get(0).getMessage(), containsString("Unknown code (for 'http://terminology.hl7.org/CodeSystem/v2-0074#PAT')"));
assertEquals("Base64 encoded values SHOULD not contain any whitespace (per RFC 4648). Note that non-validating readers are encouraged to accept whitespace anyway", errors.get(1).getMessage()); assertThat(messages.get(1).getMessage(), containsString("Unknown code (for 'http://loinc.org#1-8')"));
assertThat(messages.get(2).getMessage(), containsString("None of the codings provided are in the value set 'LOINC Diagnostic Report Codes'"));
assertEquals("Base64 encoded values SHOULD not contain any whitespace (per RFC 4648). Note that non-validating readers are encouraged to accept whitespace anyway", messages.get(3).getMessage());
} }
@Test @Test
@ -1070,7 +1075,7 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
ValidationResult output = myFhirValidator.validateWithResult(input); ValidationResult output = myFhirValidator.validateWithResult(input);
List<SingleValidationMessage> res = logResultsAndReturnNonInformationalOnes(output); List<SingleValidationMessage> res = logResultsAndReturnNonInformationalOnes(output);
assertEquals(1, res.size(), output.toString()); assertEquals(1, res.size(), output.toString());
assertEquals("A code with no system has no defined meaning, and it cannot be validated. A system should be provided", output.getMessages().get(0).getMessage()); assertEquals("Coding has no system. A code with no system has no defined meaning, and it cannot be validated. A system should be provided", output.getMessages().get(0).getMessage());
} }
/** /**
@ -1253,6 +1258,8 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
@Test @Test
public void testValidateResourceWithExampleBindingCodeValidationFailing() { public void testValidateResourceWithExampleBindingCodeValidationFailing() {
addValidConcept("http://loinc.org", "12345");
Observation input = createObservationWithDefaultSubjectPerfomerEffective(); Observation input = createObservationWithDefaultSubjectPerfomerEffective();
input.getText().setDiv(new XhtmlNode().setValue("<div>AA</div>")).setStatus(Narrative.NarrativeStatus.GENERATED); input.getText().setDiv(new XhtmlNode().setValue("<div>AA</div>")).setStatus(Narrative.NarrativeStatus.GENERATED);
@ -1303,6 +1310,8 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
@Test @Test
public void testValidateResourceWithExampleBindingCodeValidationPassingLoincWithExpansion() { public void testValidateResourceWithExampleBindingCodeValidationPassingLoincWithExpansion() {
Observation input = createObservationWithDefaultSubjectPerfomerEffective(); Observation input = createObservationWithDefaultSubjectPerfomerEffective();
input.getText().setDiv(new XhtmlNode().setValue("<div>AA</div>")).setStatus(Narrative.NarrativeStatus.GENERATED); input.getText().setDiv(new XhtmlNode().setValue("<div>AA</div>")).setStatus(Narrative.NarrativeStatus.GENERATED);
@ -1319,7 +1328,7 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
ValidationResult output = myFhirValidator.validateWithResult(input); ValidationResult output = myFhirValidator.validateWithResult(input);
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output); List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
assertEquals(1, errors.size()); assertEquals(1, errors.size());
assertEquals("Unknown code for 'http://loinc.org#1234'", errors.get(0).getMessage()); assertEquals("Unknown code (for 'http://loinc.org#1234')", errors.get(0).getMessage());
} }
@Test @Test
@ -1347,10 +1356,14 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
ValidationResult output = myFhirValidator.validateWithResult(p); ValidationResult output = myFhirValidator.validateWithResult(p);
List<SingleValidationMessage> all = logResultsAndReturnAll(output); List<SingleValidationMessage> all = logResultsAndReturnAll(output);
assertEquals(1, all.size()); assertEquals(2, all.size());
assertEquals("Patient.identifier[0].type", all.get(0).getLocationString()); assertEquals("Patient.identifier[0].type", all.get(0).getLocationString());
assertThat(all.get(0).getMessage(), containsString("None of the codings provided are in the value set 'IdentifierType'"));
assertEquals(ResultSeverityEnum.WARNING, all.get(0).getSeverity()); assertThat(all.get(0).getMessage(), containsString("Unknown code (for 'http://example.com/foo/bar#bar')"));
assertEquals(ResultSeverityEnum.ERROR, all.get(0).getSeverity());
assertThat(all.get(1).getMessage(), containsString("None of the codings provided are in the value set 'IdentifierType'"));
assertEquals(ResultSeverityEnum.WARNING, all.get(1).getSeverity());
} }
@ -1369,7 +1382,7 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
output = myFhirValidator.validateWithResult(input); output = myFhirValidator.validateWithResult(input);
all = logResultsAndReturnNonInformationalOnes(output); all = logResultsAndReturnNonInformationalOnes(output);
assertEquals(2, all.size()); assertEquals(2, all.size());
assertThat(all.get(0).getMessage(), containsString("The unit 'Heck' is unknown' at position 0 for 'http://unitsofmeasure.org#Heck'")); assertThat(all.get(0).getMessage(), containsString("The Coding provided (http://unitsofmeasure.org#Heck) was not found in the value set 'Vital Signs Units' (http://hl7.org/fhir/ValueSet/ucum-vitals-common|4.3.0)"));
assertThat(all.get(1).getMessage(), containsString("The value provided ('Heck') was not found in the value set 'Body Temperature Units'")); assertThat(all.get(1).getMessage(), containsString("The value provided ('Heck') was not found in the value set 'Body Temperature Units'"));
} }
@ -1415,6 +1428,8 @@ public class FhirInstanceValidatorR4BTest extends BaseValidationTestWithInlineMo
IValidatorResourceFetcher resourceFetcher = mock(IValidatorResourceFetcher.class); IValidatorResourceFetcher resourceFetcher = mock(IValidatorResourceFetcher.class);
IValidationPolicyAdvisor policyAdvisor = mock(IValidationPolicyAdvisor.class); IValidationPolicyAdvisor policyAdvisor = mock(IValidationPolicyAdvisor.class);
when(policyAdvisor.policyForElement(any(), any(),any(),any(),any())).thenReturn(EnumSet.allOf(IValidationPolicyAdvisor.ElementValidationAction.class));
when(policyAdvisor.policyForCodedContent(any(),any(),any(),any(),any(),any(),any(),any(),any())).thenReturn(EnumSet.allOf(IValidationPolicyAdvisor.CodedContentValidationAction.class));
when(policyAdvisor.policyForReference(any(), any(), any(), any())).thenReturn(ReferenceValidationPolicy.CHECK_TYPE_IF_EXISTS); when(policyAdvisor.policyForReference(any(), any(), any(), any())).thenReturn(ReferenceValidationPolicy.CHECK_TYPE_IF_EXISTS);
when(policyAdvisor.policyForContained(any(), any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(ContainedReferenceValidationPolicy.CHECK_TYPE); when(policyAdvisor.policyForContained(any(), any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(ContainedReferenceValidationPolicy.CHECK_TYPE);