Add chaained near search test (#4611)
* Add chaained near search test * robustify test, remove gate checking * Add changelog * Correct issue number * Tidy
This commit is contained in:
parent
9492999ed6
commit
bfa8ca9571
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
type: fix
|
||||
issue: 4613
|
||||
jira: SMILE-6091
|
||||
title: "Previously, SPECIAL search parameters that were _not_ nearness parameters, such as simple string Search Parameters, could not be used in chained queries. This has been resolved, and now queries like `OrganizationAffiliation?location.some-special-param=abc` will work as intended."
|
|
@ -664,11 +664,8 @@ public class ResourceLinkPredicateBuilder
|
|||
qp = new ReferenceParam();
|
||||
break;
|
||||
case SPECIAL:
|
||||
if ("Location.position".equals(theParam.getPath())) {
|
||||
qp = new SpecialParam();
|
||||
break;
|
||||
}
|
||||
throw new InternalErrorException(Msg.code(1248) + "Don't know how to convert param type: " + theParam.getParamType());
|
||||
case URI:
|
||||
qp = new UriParam();
|
||||
break;
|
||||
|
|
|
@ -67,6 +67,10 @@ public class FhirResourceDaoDstu3SearchDistanceTest extends BaseJpaDstu3Test {
|
|||
assertThat(ids, contains(locId));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testNearSearchChained() {
|
||||
}
|
||||
@Test
|
||||
public void testNearSearchApproximate() {
|
||||
Location loc = new Location();
|
||||
|
|
|
@ -4,7 +4,13 @@ import ca.uhn.fhir.jpa.searchparam.MatchUrlService;
|
|||
import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
|
||||
import ca.uhn.fhir.jpa.test.BaseJpaR4Test;
|
||||
import ca.uhn.fhir.jpa.util.CoordCalculatorTestUtil;
|
||||
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
|
||||
import org.hl7.fhir.instance.model.api.IIdType;
|
||||
import org.hl7.fhir.r4.model.Enumerations;
|
||||
import org.hl7.fhir.r4.model.Location;
|
||||
import org.hl7.fhir.r4.model.OrganizationAffiliation;
|
||||
import org.hl7.fhir.r4.model.Reference;
|
||||
import org.hl7.fhir.r4.model.SearchParameter;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -42,6 +48,65 @@ public class FhirResourceDaoR4SearchDistanceTest extends BaseJpaR4Test {
|
|||
assertThat(ids, contains(locId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNearSearchDistanceChained() {
|
||||
Location location = new Location();
|
||||
double latitude = CoordCalculatorTestUtil.LATITUDE_CHIN;
|
||||
double longitude = CoordCalculatorTestUtil.LATITUDE_CHIN;
|
||||
Location.LocationPositionComponent position = new Location.LocationPositionComponent().setLatitude(latitude).setLongitude(longitude);
|
||||
location.setPosition(position);
|
||||
|
||||
IIdType id = myLocationDao.create(location).getId();
|
||||
|
||||
OrganizationAffiliation aff = new OrganizationAffiliation();
|
||||
aff.addLocation(new Reference(id));
|
||||
IIdType affId = myOrganizationAffiliationDao.create(aff).getId();
|
||||
SearchParameterMap map = myMatchUrlService.translateMatchUrl("OrganizationAffiliation?location." + Location.SP_NEAR + "=" + latitude + "|" + longitude, myFhirContext.getResourceDefinition("OrganizationAffiliation"));
|
||||
|
||||
List<String> ids = toUnqualifiedVersionlessIdValues(myOrganizationAffiliationDao.search(map));
|
||||
assertThat(ids, contains(affId.toUnqualifiedVersionless().toString()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNearSearchDistanceOnSpecialParameterChained() {
|
||||
//Given a special SP exists
|
||||
SearchParameter parameter = new SearchParameter();
|
||||
parameter.setId("location-postalcode-near");
|
||||
parameter.setName("arbitrary-name");
|
||||
parameter.setStatus(Enumerations.PublicationStatus.ACTIVE);
|
||||
parameter.setCode("postalcode-near");
|
||||
parameter.addBase("Location");
|
||||
parameter.setType(Enumerations.SearchParamType.SPECIAL);
|
||||
parameter.setExpression("Location.address.postalCode");
|
||||
mySearchParameterDao.update(parameter, new SystemRequestDetails());
|
||||
|
||||
//And given an OrganizationAffiliation->Location reference
|
||||
Location location = new Location();
|
||||
location.getAddress().setPostalCode("60108");
|
||||
IIdType locId = myLocationDao.create(location).getId();
|
||||
|
||||
OrganizationAffiliation aff = new OrganizationAffiliation();
|
||||
aff.addLocation(new Reference(locId));
|
||||
IIdType affId = myOrganizationAffiliationDao.create(aff).getId();
|
||||
|
||||
{
|
||||
//When: We search on the location
|
||||
SearchParameterMap map = myMatchUrlService.translateMatchUrl("Location?postalcode-near=60108", myFhirContext.getResourceDefinition("Location"));
|
||||
List<String> ids = toUnqualifiedVersionlessIdValues(myLocationDao.search(map));
|
||||
//Then: it should find the location
|
||||
assertThat(ids, contains(locId.toUnqualifiedVersionless().toString()));
|
||||
}
|
||||
|
||||
{
|
||||
//When: We search on the OrganizationAffiliation via its location in a chain
|
||||
SearchParameterMap map = myMatchUrlService.translateMatchUrl("OrganizationAffiliation?location.postalcode-near=60108", myFhirContext.getResourceDefinition("OrganizationAffiliation"));
|
||||
List<String> ids = toUnqualifiedVersionlessIdValues(myOrganizationAffiliationDao.search(map));
|
||||
|
||||
//Then: It should find the OrganizationAffiliation
|
||||
assertThat(ids, contains(affId.toUnqualifiedVersionless().toString()));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNearSearchDistanceZero() {
|
||||
Location loc = new Location();
|
||||
|
|
Loading…
Reference in New Issue