DATAMONGO-341 - Eagerly reject null values in MongoTemplate.geoNear(…).
This commit is contained in:
@@ -490,6 +490,14 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
|
||||
|
||||
public <T> GeoResults<T> geoNear(NearQuery near, Class<T> entityClass, String collectionName) {
|
||||
|
||||
if (near == null) {
|
||||
throw new InvalidDataAccessApiUsageException("NearQuery must not be null!");
|
||||
}
|
||||
|
||||
if (entityClass == null) {
|
||||
throw new InvalidDataAccessApiUsageException("Entity class must not be null!");
|
||||
}
|
||||
|
||||
String collection = StringUtils.hasText(collectionName) ? collectionName : determineCollectionName(entityClass);
|
||||
BasicDBObject command = new BasicDBObject("geoNear", collection);
|
||||
command.putAll(near.toDBObject());
|
||||
|
||||
@@ -30,8 +30,10 @@ import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.data.mapping.context.MappingContext;
|
||||
import org.springframework.data.mongodb.core.convert.AbstractMongoConverter;
|
||||
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
||||
import org.springframework.data.mongodb.core.geo.Point;
|
||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
||||
import org.springframework.data.mongodb.core.query.NearQuery;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
@@ -290,6 +292,66 @@ public abstract class MongoOperationsUnitTests {
|
||||
}.assertDataAccessException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-341
|
||||
*/
|
||||
@Test
|
||||
public void geoNearRejectsNullNearQuery() {
|
||||
|
||||
new Execution() {
|
||||
@Override
|
||||
public void doWith(MongoOperations operations) {
|
||||
operations.geoNear(null, Person.class);
|
||||
}
|
||||
}.assertDataAccessException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-341
|
||||
*/
|
||||
@Test
|
||||
public void geoNearRejectsNullNearQueryifCollectionGiven() {
|
||||
|
||||
new Execution() {
|
||||
@Override
|
||||
public void doWith(MongoOperations operations) {
|
||||
operations.geoNear(null, Person.class, "collection");
|
||||
}
|
||||
}.assertDataAccessException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-341
|
||||
*/
|
||||
@Test
|
||||
public void geoNearRejectsNullEntityClass() {
|
||||
|
||||
final NearQuery query = NearQuery.near(new Point(10, 20));
|
||||
|
||||
new Execution() {
|
||||
@Override
|
||||
public void doWith(MongoOperations operations) {
|
||||
operations.geoNear(query, null);
|
||||
}
|
||||
}.assertDataAccessException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-341
|
||||
*/
|
||||
@Test
|
||||
public void geoNearRejectsNullEntityClassIfCollectionGiven() {
|
||||
|
||||
final NearQuery query = NearQuery.near(new Point(10, 20));
|
||||
|
||||
new Execution() {
|
||||
@Override
|
||||
public void doWith(MongoOperations operations) {
|
||||
operations.geoNear(query, null, "collection");
|
||||
}
|
||||
}.assertDataAccessException();
|
||||
}
|
||||
|
||||
private abstract class Execution {
|
||||
|
||||
public void assertDataAccessException() {
|
||||
|
||||
@@ -27,24 +27,19 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.springframework.context.support.GenericApplicationContext;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
|
||||
import org.springframework.data.mongodb.core.convert.MongoWriter;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DB;
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.Mongo;
|
||||
import com.mongodb.MongoException;
|
||||
import com.mongodb.WriteResult;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link MongoTemplate}.
|
||||
|
||||
Reference in New Issue
Block a user