Added tests

This commit is contained in:
Nick Goupinets 2021-03-15 10:31:38 -04:00
parent 8c80e0838d
commit 04a0ecfc2b
5 changed files with 124 additions and 3 deletions

View File

@ -75,6 +75,7 @@ public class FieldValidatingInterceptor {
protected void handleRequest(RequestDetails theRequest, IBaseResource theResource) {
if (!theRequest.getHeaders(VALIDATION_DISABLED_HEADER).isEmpty()) {
ourLog.debug("Address validation is disabled for this request via header");
return;
}
FhirContext ctx = theRequest.getFhirContext();

View File

@ -10,13 +10,19 @@ import org.hl7.fhir.r4.model.Patient;
import org.hl7.fhir.r4.model.Person;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import static ca.uhn.fhir.rest.server.interceptor.s13n.StandardizingInterceptor.STANDARDIZATION_DISABLED_HEADER;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.*;
class StandardizingInterceptorTest {
@ -32,6 +38,7 @@ class StandardizingInterceptorTest {
"\t\t\"telecom.where(system='phone').value\" : \"PHONE\"\n" +
"\t\t}\n" +
"}";
private static final String BAD_CONFIG = "{ \"Person\" : { \"Person.name.family\" : \"org.nonexistent.Standardizer\"}}";
private static FhirContext ourCtx = FhirContext.forR4();
@ -59,6 +66,38 @@ class StandardizingInterceptorTest {
assertEquals("Jim O'Brian", p.getName().get(1).getNameAsSingleString());
}
@Test
public void testNullsWork() {
try {
myInterceptor.resourcePreCreate(myRequestDetails, null);
} catch (Exception e) {
fail();
}
}
@Test
public void testBadConfig() throws Exception {
myInterceptor = new StandardizingInterceptor(new ObjectMapper().readValue(BAD_CONFIG, Map.class));
try {
myInterceptor.resourcePreCreate(myRequestDetails, new Person());
fail();
} catch (Exception e) {
}
}
@Test
public void testDisablingValidationViaHeader() {
when(myRequestDetails.getHeaders(eq(STANDARDIZATION_DISABLED_HEADER))).thenReturn(Arrays.asList(new String[]{"True"}));
Person p = new Person();
p.addName().setFamily("non'normalized").addGiven("name");
myInterceptor.resourcePreUpdate(myRequestDetails, null, p);
assertEquals("name non'normalized", p.getName().get(0).getNameAsSingleString());
}
@Test
public void testTelecomStandardization() throws Exception {
Person p = new Person();

View File

@ -9,10 +9,15 @@ import org.hl7.fhir.r4.model.Person;
import org.hl7.fhir.r4.model.StringType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import javax.annotation.Nonnull;
import java.util.Arrays;
import java.util.Properties;
import static ca.uhn.fhir.rest.server.interceptor.s13n.StandardizingInterceptor.STANDARDIZATION_DISABLED_HEADER;
import static ca.uhn.fhir.rest.server.interceptor.validation.address.AddressValidatingInterceptor.ADDRESS_VALIDATION_DISABLED_HEADER;
import static ca.uhn.fhir.rest.server.interceptor.validation.address.AddressValidatingInterceptor.PROPERTY_VALIDATOR_CLASS;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -20,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@ -74,6 +80,28 @@ class AddressValidatingInterceptorTest {
return properties;
}
@Test
public void testDisablingValidationViaHeader() {
when(myRequestDetails.getHeaders(eq(ADDRESS_VALIDATION_DISABLED_HEADER))).thenReturn(Arrays.asList(new String[]{"True"}));
Person p = new Person();
AddressValidatingInterceptor spy = Mockito.spy(myInterceptor);
spy.resourcePreCreate(myRequestDetails, p);
Mockito.verify(spy, times(0)).validateAddress(any(), any());
}
@Test
public void testValidationServiceError() {
myValidator = mock(IAddressValidator.class);
when(myValidator.isValid(any(), any())).thenThrow(new RuntimeException());
myInterceptor.setAddressValidator(myValidator);
Address address = new Address();
myInterceptor.validateAddress(address, ourCtx);
assertValidated(address, "not-validated");
}
@Test
void validate() {
Address address = new Address();
@ -128,7 +156,6 @@ class AddressValidatingInterceptorTest {
}
public static class TestAddressValidator implements IAddressValidator {
@Override
public AddressValidationResult isValid(IBase theAddress, FhirContext theFhirContext) throws AddressValidationException {
return null;

View File

@ -38,6 +38,14 @@ class LoquateAddressValidatorTest {
" } ]\n" +
"}";
private static final String RESPONSE_INVALID = "[\n" +
" {\n" +
" \"Input\": {\n" +
" \"Address\": \"\"\n" +
" }\n" +
" }\n" +
"]";
private static final String RESPONSE_INVALID_ADDRESS = "[\n" +
" {\n" +
" \"Input\": {\n" +
@ -86,6 +94,25 @@ class LoquateAddressValidatorTest {
myValidator = new LoquateAddressValidator(myProperties);
}
@Test
public void testInvalidInit() {
try {
new LoquateAddressValidator(new Properties());
fail();
} catch (Exception e) {
}
}
@Test
public void testInvalidAddressValidationResponse() throws Exception {
try {
AddressValidationResult res = myValidator.getValidationResult(new AddressValidationResult(),
new ObjectMapper().readTree(RESPONSE_INVALID), ourCtx);
fail();
} catch (AddressValidationException e) {
}
}
@Test
public void testRequestBody() {
try {

View File

@ -8,7 +8,12 @@ import org.hl7.fhir.r4.model.Person;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import static ca.uhn.fhir.rest.server.interceptor.s13n.StandardizingInterceptor.STANDARDIZATION_DISABLED_HEADER;
import static ca.uhn.fhir.rest.server.interceptor.validation.fields.FieldValidatingInterceptor.VALIDATION_DISABLED_HEADER;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ -28,6 +33,18 @@ class FieldValidatingInterceptorTest {
myInterceptor = new FieldValidatingInterceptor();
}
@Test
public void testDisablingValidationViaHeader() {
RequestDetails request = newRequestDetails();
when(request.getHeaders(eq(VALIDATION_DISABLED_HEADER))).thenReturn(Arrays.asList(new String[]{"True"}));
Person person = new Person();
person.addTelecom().setSystem(ContactPoint.ContactPointSystem.EMAIL).setValue("EMAIL");
myInterceptor.handleRequest(request, person);
assertEquals("EMAIL", person.getTelecom().get(0).getValue());
}
@Test
public void testEmailValidation() {
Person person = new Person();
@ -52,6 +69,16 @@ class FieldValidatingInterceptorTest {
}
}
@Test
public void testCustomInvalidValidation() {
myInterceptor.getConfig().put("telecom.where(system='phone').value", "ClassThatDoesntExist");
try {
myInterceptor.handleRequest(newRequestDetails(), new Person());
fail();
} catch (Exception e) {
}
}
@Test
public void testCustomValidation() {
myInterceptor.getConfig().put("telecom.where(system='phone').value", EmptyValidator.class.getName());