package org.mongodb.morphia.query;
import com.mongodb.BasicDBObject;
import org.junit.Test;
import org.mongodb.morphia.TestBase;
import org.mongodb.morphia.testutil.JSONMatcher;
import static org.junit.Assert.assertThat;
import static org.mongodb.morphia.geo.PointBuilder.pointBuilder;
import static org.mongodb.morphia.query.FilterOperator.NEAR;
public class StandardGeoFieldCriteriaTest extends TestBase {
@Test
public void shouldCreateCorrectNearQueryWithMaxDistance() {
// given
int maxDistanceMeters = 13;
double latitude = 3.2;
double longitude = 5.7;
QueryImpl<Object> stubQuery = (QueryImpl<Object>) getDs().find(Object.class);
stubQuery.disableValidation();
StandardGeoFieldCriteria criteria = new StandardGeoFieldCriteria(stubQuery, "location", NEAR, pointBuilder()
.latitude(latitude)
.longitude(longitude)
.build(),
maxDistanceMeters);
// when
BasicDBObject queryDocument = new BasicDBObject();
criteria.addTo(queryDocument);
// then
assertThat(queryDocument.toString(), JSONMatcher.jsonEqual(" { location : "
+ " { $near : "
+ " { $geometry : "
+ " { type : 'Point' , "
+ " coordinates : [ " + longitude + " , " + latitude + "]"
+ " }, "
+ " $maxDistance : " + maxDistanceMeters
+ " }"
+ " }"
+ "}"));
}
@Test
public void shouldCreateCorrectNearQueryWithoutMaxDistance() {
// given
double latitude = 3.2;
double longitude = 5.7;
QueryImpl<Object> stubQuery = (QueryImpl<Object>) getDs().find(Object.class);
stubQuery.disableValidation();
StandardGeoFieldCriteria criteria = new StandardGeoFieldCriteria(stubQuery, "location", NEAR, pointBuilder()
.latitude(latitude)
.longitude(longitude)
.build(),
null);
// when
BasicDBObject queryDocument = new BasicDBObject();
criteria.addTo(queryDocument);
// then
assertThat(queryDocument.toString(), JSONMatcher.jsonEqual(" { location : "
+ " { $near : "
+ " { $geometry : "
+ " { type : 'Point' , "
+ " coordinates : [ " + longitude + " , " + latitude + "]"
+ " } "
+ " }"
+ " }"
+ "}"));
}
}