From 490db7c39f2f898d432d0ea62b7611e4971b90f1 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 7 Dec 2011 18:06:25 +0100 Subject: [PATCH] =?UTF-8?q?DATAMONGO-341=20-=20Eagerly=20reject=20null=20v?= =?UTF-8?q?alues=20in=20MongoTemplate.geoNear(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/mongodb/core/MongoTemplate.java | 8 +++ .../core/MongoOperationsUnitTests.java | 62 +++++++++++++++++++ .../mongodb/core/MongoTemplateUnitTests.java | 5 -- 3 files changed, 70 insertions(+), 5 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 2d89fa24f..f97efb1bc 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -490,6 +490,14 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { public GeoResults geoNear(NearQuery near, Class 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()); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoOperationsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoOperationsUnitTests.java index 2210cf0eb..ea183dbe5 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoOperationsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoOperationsUnitTests.java @@ -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() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java index 048d02f91..42853ab72 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java @@ -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}.