From 1e4a497181ea05494c1652ffbeb28e0226bed485 Mon Sep 17 00:00:00 2001 From: James Agnew Date: Mon, 15 Apr 2019 14:41:50 -0400 Subject: [PATCH] Add some tests --- .../dao/r4/SearchParamExtractorR4Test.java | 21 +++- .../provider/r4/ResourceProviderR4Test.java | 98 +++++++++++++++++-- 2 files changed, 108 insertions(+), 11 deletions(-) diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java index 3597e4b0b99..02061893f58 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java @@ -8,7 +8,9 @@ import ca.uhn.fhir.jpa.searchparam.JpaRuntimeSearchParam; import ca.uhn.fhir.jpa.searchparam.extractor.PathAndRef; import ca.uhn.fhir.jpa.searchparam.extractor.SearchParamExtractorR4; import ca.uhn.fhir.jpa.searchparam.registry.ISearchParamRegistry; +import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum; import ca.uhn.fhir.util.TestUtil; +import com.google.common.collect.Sets; import org.hl7.fhir.r4.hapi.ctx.DefaultProfileValidationSupport; import org.hl7.fhir.r4.hapi.ctx.IValidationSupport; import org.hl7.fhir.r4.model.*; @@ -34,6 +36,7 @@ public class SearchParamExtractorR4Test { @Before public void before() { + mySearchParamRegistry = new ISearchParamRegistry() { @Override public void forceRefresh() { @@ -52,11 +55,12 @@ public class SearchParamExtractorR4Test { @Override public Map getActiveSearchParams(String theResourceName) { - RuntimeResourceDefinition nextResDef = ourCtx.getResourceDefinition(theResourceName); Map sps = new HashMap<>(); + RuntimeResourceDefinition nextResDef = ourCtx.getResourceDefinition(theResourceName); for (RuntimeSearchParam nextSp : nextResDef.getSearchParams()) { sps.put(nextSp.getName(), nextSp); } + return sps; } @@ -130,6 +134,21 @@ public class SearchParamExtractorR4Test { assertEquals("Consent/999", ((Reference) links.get(0).getRef()).getReference()); } + + @Test + public void testExtensionContainingReference() { + String path = "Patient.extension('http://patext').value.as(Reference)"; + + RuntimeSearchParam sp = new RuntimeSearchParam("extpat", "Patient SP", path, RestSearchParameterTypeEnum.REFERENCE, new HashSet<>(), Sets.newHashSet("Patient"), RuntimeSearchParam.RuntimeSearchParamStatusEnum.ACTIVE); + + Patient patient = new Patient(); + patient.addExtension("http://patext", new Reference("Organization/AAA")); + + SearchParamExtractorR4 extractor = new SearchParamExtractorR4(new ModelConfig(), ourCtx, ourValidationSupport, mySearchParamRegistry); + List links = extractor.extractResourceLinks(patient, sp); + assertEquals(1, links.size()); + } + @Test public void testExtractComponentQuantities() { Observation o1 = new Observation(); diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java index e66d7cc8fc8..1cdce063232 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java @@ -267,6 +267,84 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { } + @Test + public void testSearchWithDeepChain() throws IOException { + + SearchParameter sp = new SearchParameter(); + sp.addBase("Patient"); + sp.setStatus(Enumerations.PublicationStatus.ACTIVE); + sp.setType(Enumerations.SearchParamType.REFERENCE); + sp.setCode("extpatorg"); + sp.setName("extpatorg"); + sp.setExpression("Patient.extension('http://patext').value.as(Reference)"); + ourClient.create().resource(sp).execute(); + + sp = new SearchParameter(); + sp.addBase("Organization"); + sp.setStatus(Enumerations.PublicationStatus.ACTIVE); + sp.setType(Enumerations.SearchParamType.REFERENCE); + sp.setCode("extorgorg"); + sp.setName("extorgorg"); + sp.setExpression("Organization.extension('http://orgext').value.as(Reference)"); + ourClient.create().resource(sp).execute(); + + mySearchParamRegistry.forceRefresh(); + + Organization grandParent = new Organization(); + grandParent.setName("GRANDPARENT"); + IIdType grandParentId = ourClient.create().resource(grandParent).execute().getId().toUnqualifiedVersionless(); + + Organization parent = new Organization(); + parent.setName("PARENT"); + parent.getPartOf().setReference(grandParentId.getValue()); + parent.addExtension("http://orgext", new Reference().setReference(grandParentId.getValue())); + IIdType parentId = ourClient.create().resource(parent).execute().getId().toUnqualifiedVersionless(); + + Organization org = new Organization(); + org.setName("ORGANIZATION"); + org.getPartOf().setReference(parentId.getValue()); + org.addExtension("http://orgext", new Reference().setReference(parentId.getValue())); + IIdType orgId = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless(); + + myCaptureQueriesListener.logSelectQueriesForCurrentThread(); + myCaptureQueriesListener.clear(); + + Patient p = new Patient(); + p.getManagingOrganization().setReference(orgId.getValue()); + p.addExtension("http://patext", new Reference().setReference(orgId.getValue())); + String pid = ourClient.create().resource(p).execute().getId().toUnqualified().getValue(); + + List idValues; + + // Regular search param + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?organization=" + orgId.getValue()); + assertThat(idValues, contains(pid)); + + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?organization.name=ORGANIZATION"); + assertThat(idValues, contains(pid)); + + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?organization.partof.name=PARENT"); + assertThat(idValues, contains(pid)); + + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?organization.partof.partof.name=GRANDPARENT"); + assertThat(idValues, contains(pid)); + + // Search param on extension + myCaptureQueriesListener.clear(); + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?extpatorg=" + orgId.getValue()); + myCaptureQueriesListener.logSelectQueries(); + assertThat(idValues, contains(pid)); + + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?extpatorg.name=ORGANIZATION"); + assertThat(idValues, contains(pid)); + + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?extpatorg.extorgorg.name=PARENT"); + assertThat(idValues, contains(pid)); + + idValues = searchAndReturnUnqualifiedIdValues(ourServerBase + "/Patient?extpatorg.extorgorg.extorgorg.name=GRANDPARENT"); + assertThat(idValues, contains(pid)); + + } @Test public void testSearchFetchPageBeyondEnd() { @@ -430,7 +508,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { @Test @Ignore public void test() throws IOException { - HttpGet get = new HttpGet(ourServerBase + "/QuestionnaireResponse?_count=50&status=completed&questionnaire=ARIncenterAbsRecord&_lastUpdated=%3E"+UrlUtil.escapeUrlParam("=2018-01-01")+"&context.organization=O3435"); + HttpGet get = new HttpGet(ourServerBase + "/QuestionnaireResponse?_count=50&status=completed&questionnaire=ARIncenterAbsRecord&_lastUpdated=%3E" + UrlUtil.escapeUrlParam("=2018-01-01") + "&context.organization=O3435"); ourLog.info("*** MAKING QUERY"); ourHttpClient.execute(get); System.exit(0); @@ -581,7 +659,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { Binary fromDB = ourClient.read().resource(Binary.class).withId(resource.toVersionless()).execute(); assertEquals("1", fromDB.getIdElement().getVersionIdPart()); - arr[ 0 ] = 2; + arr[0] = 2; HttpPut putRequest = new HttpPut(ourServerBase + "/Binary/" + resource.getIdPart()); putRequest.setEntity(new ByteArrayEntity(arr, ContentType.parse("dansk"))); CloseableHttpResponse resp = ourHttpClient.execute(putRequest); @@ -595,7 +673,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { fromDB = ourClient.read().resource(Binary.class).withId(resource.toVersionless()).execute(); assertEquals("2", fromDB.getIdElement().getVersionIdPart()); - arr[ 0 ] = 3; + arr[0] = 3; fromDB.setContent(arr); String encoded = myFhirCtx.newJsonParser().encodeResourceToString(fromDB); putRequest = new HttpPut(ourServerBase + "/Binary/" + resource.getIdPart()); @@ -613,7 +691,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { // Now an update with the wrong ID in the body - arr[ 0 ] = 4; + arr[0] = 4; binary.setId(""); encoded = myFhirCtx.newJsonParser().encodeResourceToString(binary); putRequest = new HttpPut(ourServerBase + "/Binary/" + resource.getIdPart()); @@ -667,12 +745,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { ourClient.registerInterceptor(new IClientInterceptor() { @Override public void interceptRequest(IHttpRequest theRequest) { - theRequest.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME); + theRequest.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME); } + @Override - public void interceptResponse(IHttpResponse theResponse) { // TODO Auto-generated method stu + public void interceptResponse(IHttpResponse theResponse) { // TODO Auto-generated method stu } - + }); try { // Missing status, which is mandatory @@ -869,7 +948,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { response.close(); } } - + @Test public void testCreateResourceReturnsOperationOutcome() throws IOException { String resource = ""; @@ -1225,7 +1304,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { // String response = ""; StringBuilder b = new StringBuilder(); - char[] buf = new char[ 1000 ]; + char[] buf = new char[1000]; while (socketInput.read(buf) != -1) { b.append(buf); } @@ -5226,7 +5305,6 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { } - private String toStr(Date theDate) { return new InstantDt(theDate).getValueAsString(); }