From 998bb09a9292bb36a368e7c1630a2d8a282bf04c Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 3 Jul 2014 08:52:51 +0200 Subject: [PATCH] DATAMONGO-978 - Derived delete query should pass on type information. We now pass on type information for derived delete queries to the according delete operation. This propagates the information correctly to the according Before and After events. Before this change the type would have been set to null in case of non collection like method return type. Original pull request: #199. --- .../mongodb/repository/query/AbstractMongoQuery.java | 2 +- ...nitTests.java => AbstractMongoQueryUnitTests.java} | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) rename spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/{AbstracMongoQueryUnitTests.java => AbstractMongoQueryUnitTests.java} (96%) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java index 5f104634d..ef61aae62 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java @@ -408,7 +408,7 @@ public abstract class AbstractMongoQuery implements RepositoryQuery { return operations.findAllAndRemove(query, metadata.getJavaType()); } - WriteResult writeResult = operations.remove(query, metadata.getCollectionName()); + WriteResult writeResult = operations.remove(query, metadata.getJavaType(), metadata.getCollectionName()); return writeResult != null ? writeResult.getN() : 0L; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstracMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java similarity index 96% rename from spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstracMongoQueryUnitTests.java rename to spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java index b70c102d8..ea75a89c4 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstracMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java @@ -54,7 +54,7 @@ import com.mongodb.WriteResult; * @author Oliver Gierke */ @RunWith(MockitoJUnitRunner.class) -public class AbstracMongoQueryUnitTests { +public class AbstractMongoQueryUnitTests { @Mock RepositoryMetadata metadataMock; @Mock MongoOperations mongoOperationsMock; @@ -88,7 +88,8 @@ public class AbstracMongoQueryUnitTests { createQueryForMethod("deletePersonByLastname", String.class).setDeleteQuery(true).execute(new Object[] { "booh" }); - verify(this.mongoOperationsMock, times(1)).remove(Matchers.any(Query.class), Matchers.eq("persons")); + verify(this.mongoOperationsMock, times(1)).remove(Matchers.any(Query.class), Matchers.eq(Person.class), + Matchers.eq("persons")); verify(this.mongoOperationsMock, times(0)).find(Matchers.any(Query.class), Matchers.any(Class.class), Matchers.anyString()); } @@ -122,19 +123,21 @@ public class AbstracMongoQueryUnitTests { /** * @see DATAMONGO-566 + * @see DATAMONGO-978 */ @Test public void testDeleteExecutionReturnsNrDocumentsDeletedFromWriteResult() { when(writeResultMock.getN()).thenReturn(100); - when(this.mongoOperationsMock.remove(Matchers.any(Query.class), Matchers.eq("persons"))) + when(this.mongoOperationsMock.remove(Matchers.any(Query.class), Matchers.eq(Person.class), Matchers.eq("persons"))) .thenReturn(writeResultMock); MongoQueryFake query = createQueryForMethod("deletePersonByLastname", String.class); query.setDeleteQuery(true); assertThat(query.execute(new Object[] { "fake" }), is((Object) 100L)); - verify(this.mongoOperationsMock, times(1)).remove(Matchers.any(Query.class), Matchers.eq("persons")); + verify(this.mongoOperationsMock, times(1)).remove(Matchers.any(Query.class), Matchers.eq(Person.class), + Matchers.eq("persons")); } private MongoQueryFake createQueryForMethod(String methodName, Class... paramTypes) {