started writing test
@@ -5,6 +5,7 @@ import ca.uhn.fhir.jpa.dao.data.ISearchDao;
import ca.uhn.fhir.jpa.entity.Search;
import ca.uhn.fhir.jpa.provider.r4.ResourceProviderR4Test;
import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
+import ca.uhn.fhir.jpa.util.CoordCalculatorTest;
import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
import ca.uhn.fhir.model.primitive.InstantDt;
import ca.uhn.fhir.model.primitive.UriDt;
@@ -4282,6 +4283,49 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
}
+ @Test
+ public void testNearSearchApproximate() {
+ Location loc = new Location();
+ double latitude = CoordCalculatorTest.LATITUDE_UHN;
+ double longitude = CoordCalculatorTest.LONGITUDE_UHN;
+ Location.LocationPositionComponent position = new Location.LocationPositionComponent().setLatitude(latitude).setLongitude(longitude);
+ loc.setPosition(position);
+ IIdType locId = ourClient.create().resource(loc).execute().getId().toUnqualifiedVersionless();
+
+ { // In the box
+ double bigEnoughDistance = CoordCalculatorTest.DISTANCE_KM_CHIN_TO_UHN * 2;
+ String url = "/Location/" +
+ Location.SP_NEAR + "=" + CoordCalculatorTest.LATITUDE_CHIN + ":" + CoordCalculatorTest.LONGITUDE_CHIN +
+ "&" +
+ Location.SP_NEAR_DISTANCE + "=" + bigEnoughDistance + "|http://unitsofmeasure.org|km");
+
+ Bundle actual = ourClient
+ .search()
+ .byUrl(url)
+ .encodedJson()
+ .prettyPrint()
+ .returnBundle(Bundle.class)
+ .execute();
+ //@formatter:on
+
+ assertEquals(1, actual.getEntry().size());
+ assertEquals(locId.getIdPart(), actual.getEntry().get(0).getResource().getIdElement().getIdPart());
+ }
+ { // Outside the box
+ double tooSmallDistance = CoordCalculatorTest.DISTANCE_KM_CHIN_TO_UHN / 2;
+
+// SearchParameterMap map = myMatchUrlService.translateMatchUrl(
+// "Location?" +
+// Location.SP_NEAR + "=" + CoordCalculatorTest.LATITUDE_CHIN + ":" + CoordCalculatorTest.LONGITUDE_CHIN +
+// "&" +
+// Location.SP_NEAR_DISTANCE + "=" + tooSmallDistance + "|http://unitsofmeasure.org|km", myFhirCtx.getResourceDefinition("Location"));
+
+// List<String> ids = toUnqualifiedVersionlessIdValues(myLocationDao.search(map));
+// assertThat(ids.size(), is(0));
+ }
+
+ }
+
private String toStr(Date theDate) {
return new InstantDt(theDate).getValueAsString();
}
