DATAMONGO-341 - Eagerly reject null values in MongoTemplate.geoNear(…).

This commit is contained in:
Oliver Gierke
2011-12-07 18:06:25 +01:00
parent f3979c3676
commit 490db7c39f
3 changed files with 70 additions and 5 deletions

View File

@@ -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());

View File

@@ -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() {

View File

@@ -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}.