From ca4db459c4d89ff66a1fce4d9da3a159b0b8ce88 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 824bd8e60..0df0f04fa 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 @@ -391,7 +391,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) {