diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java index 9c553f277..bbd99d3d8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java @@ -424,51 +424,52 @@ class DefaultBulkOperations implements BulkOperations { models.add(new SourceAwareWriteModelHolder(source, model)); } - private void maybeEmitBeforeSaveEvent(SourceAwareWriteModelHolder it) { + private void maybeEmitBeforeSaveEvent(SourceAwareWriteModelHolder holder) { - if (it.getModel() instanceof InsertOneModel) { + if (holder.getModel() instanceof InsertOneModel) { - Document target = ((InsertOneModel) it.getModel()).getDocument(); - maybeEmitEvent(new BeforeSaveEvent<>(it.getSource(), target, collectionName)); - } else if (it.getModel() instanceof ReplaceOneModel) { + Document target = ((InsertOneModel) holder.getModel()).getDocument(); + maybeEmitEvent(new BeforeSaveEvent<>(holder.getSource(), target, collectionName)); + } else if (holder.getModel() instanceof ReplaceOneModel) { - Document target = ((ReplaceOneModel) it.getModel()).getReplacement(); - maybeEmitEvent(new BeforeSaveEvent<>(it.getSource(), target, collectionName)); + Document target = ((ReplaceOneModel) holder.getModel()).getReplacement(); + maybeEmitEvent(new BeforeSaveEvent<>(holder.getSource(), target, collectionName)); } } - private void maybeEmitAfterSaveEvent(SourceAwareWriteModelHolder it) { + private void maybeEmitAfterSaveEvent(SourceAwareWriteModelHolder holder) { - if (it.getModel() instanceof InsertOneModel) { + if (holder.getModel() instanceof InsertOneModel) { - Document target = ((InsertOneModel) it.getModel()).getDocument(); - maybeEmitEvent(new AfterSaveEvent<>(it.getSource(), target, collectionName)); - } else if (it.getModel() instanceof ReplaceOneModel) { + Document target = ((InsertOneModel) holder.getModel()).getDocument(); + maybeEmitEvent(new AfterSaveEvent<>(holder.getSource(), target, collectionName)); + } else if (holder.getModel() instanceof ReplaceOneModel) { - Document target = ((ReplaceOneModel) it.getModel()).getReplacement(); - maybeEmitEvent(new AfterSaveEvent<>(it.getSource(), target, collectionName)); + Document target = ((ReplaceOneModel) holder.getModel()).getReplacement(); + maybeEmitEvent(new AfterSaveEvent<>(holder.getSource(), target, collectionName)); } } - private void maybeInvokeAfterSaveCallback(SourceAwareWriteModelHolder it) { + private void maybeInvokeAfterSaveCallback(SourceAwareWriteModelHolder holder) { - if (it.getModel() instanceof InsertOneModel) { + if (holder.getModel() instanceof InsertOneModel) { - Document target = ((InsertOneModel) it.getModel()).getDocument(); - maybeInvokeAfterSaveCallback(it.getSource(), target); - } else if (it.getModel() instanceof ReplaceOneModel) { + Document target = ((InsertOneModel) holder.getModel()).getDocument(); + maybeInvokeAfterSaveCallback(holder.getSource(), target); + } else if (holder.getModel() instanceof ReplaceOneModel) { - Document target = ((ReplaceOneModel) it.getModel()).getReplacement(); - maybeInvokeAfterSaveCallback(it.getSource(), target); + Document target = ((ReplaceOneModel) holder.getModel()).getReplacement(); + maybeInvokeAfterSaveCallback(holder.getSource(), target); } } private , T> E maybeEmitEvent(E event) { - if (null != bulkOperationContext.getEventPublisher()) { - bulkOperationContext.getEventPublisher().publishEvent(event); + if (bulkOperationContext.getEventPublisher() == null) { + return event; } + bulkOperationContext.getEventPublisher().publishEvent(event); return event; } 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 20055ebbf..332ec87e8 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 @@ -71,7 +71,16 @@ import org.springframework.data.mongodb.core.aggregation.AggregationOptions; import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.TypedAggregation; -import org.springframework.data.mongodb.core.convert.*; +import org.springframework.data.mongodb.core.convert.DbRefResolver; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.JsonSchemaMapper; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.convert.MongoConverter; +import org.springframework.data.mongodb.core.convert.MongoCustomConversions; +import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper; +import org.springframework.data.mongodb.core.convert.MongoWriter; +import org.springframework.data.mongodb.core.convert.QueryMapper; +import org.springframework.data.mongodb.core.convert.UpdateMapper; import org.springframework.data.mongodb.core.index.IndexOperations; import org.springframework.data.mongodb.core.index.IndexOperationsProvider; import org.springframework.data.mongodb.core.index.MongoMappingEventPublisher; @@ -111,7 +120,16 @@ import com.mongodb.ClientSessionOptions; import com.mongodb.MongoException; import com.mongodb.ReadPreference; import com.mongodb.WriteConcern; -import com.mongodb.client.*; +import com.mongodb.client.AggregateIterable; +import com.mongodb.client.ClientSession; +import com.mongodb.client.DistinctIterable; +import com.mongodb.client.FindIterable; +import com.mongodb.client.MapReduceIterable; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.MongoIterable; import com.mongodb.client.model.*; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; @@ -1047,6 +1065,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, T saved = doFindAndReplace(collectionName, mappedQuery, mappedFields, mappedSort, queryContext.getCollation(entityType).orElse(null), entityType, mappedReplacement, options, resultType); + if (saved != null) { maybeEmitEvent(new AfterSaveEvent<>(saved, mappedReplacement, collectionName)); return maybeCallAfterSave(saved, mappedReplacement, collectionName); @@ -1146,7 +1165,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, } protected void ensureNotIterable(@Nullable Object o) { - if (null != o) { + if (o != null) { if (o.getClass().isArray() || ITERABLE_CLASSES.contains(o.getClass().getName())) { throw new IllegalArgumentException("Cannot use a collection here."); } @@ -2286,7 +2305,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, protected , T> E maybeEmitEvent(E event) { - if (null != eventPublisher) { + if (eventPublisher != null) { eventPublisher.publishEvent(event); } @@ -2295,7 +2314,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, protected T maybeCallBeforeConvert(T object, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(BeforeConvertCallback.class, object, collection); } @@ -2304,7 +2323,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, protected T maybeCallBeforeSave(T object, Document document, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(BeforeSaveCallback.class, object, document, collection); } @@ -2313,7 +2332,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, protected T maybeCallAfterSave(T object, Document document, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(AfterSaveCallback.class, object, document, collection); } @@ -2322,7 +2341,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, protected T maybeCallAfterConvert(T object, Document document, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(AfterConvertCallback.class, object, document, collection); } @@ -3110,13 +3129,13 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, @Nullable public T doWith(@Nullable Document document) { - if (null != document) { + if (document != null) { maybeEmitEvent(new AfterLoadEvent<>(document, type, collectionName)); } T source = reader.read(type, document); - if (null != source) { + if (source != null) { maybeEmitEvent(new AfterConvertEvent<>(document, source, collectionName)); source = maybeCallAfterConvert(source, document, collectionName); } @@ -3156,14 +3175,14 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, Class typeToRead = targetType.isInterface() || targetType.isAssignableFrom(entityType) ? entityType : targetType; - if (null != document) { + if (document != null) { maybeEmitEvent(new AfterLoadEvent<>(document, targetType, collectionName)); } Object source = reader.read(typeToRead, document); Object result = targetType.isInterface() ? projectionFactory.createProjection(targetType, source) : source; - if (null != result) { + if (result != null) { maybeEmitEvent(new AfterConvertEvent<>(document, result, collectionName)); result = maybeCallAfterConvert(result, document, collectionName); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java index b65afdb51..c35f02e5b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java @@ -39,6 +39,7 @@ import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -74,7 +75,16 @@ import org.springframework.data.mongodb.core.aggregation.AggregationOptions; import org.springframework.data.mongodb.core.aggregation.PrefixingDelegatingAggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.TypedAggregation; -import org.springframework.data.mongodb.core.convert.*; +import org.springframework.data.mongodb.core.convert.DbRefResolver; +import org.springframework.data.mongodb.core.convert.JsonSchemaMapper; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.convert.MongoConverter; +import org.springframework.data.mongodb.core.convert.MongoCustomConversions; +import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper; +import org.springframework.data.mongodb.core.convert.MongoWriter; +import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver; +import org.springframework.data.mongodb.core.convert.QueryMapper; +import org.springframework.data.mongodb.core.convert.UpdateMapper; import org.springframework.data.mongodb.core.index.MongoMappingEventPublisher; import org.springframework.data.mongodb.core.index.ReactiveIndexOperations; import org.springframework.data.mongodb.core.index.ReactiveMongoPersistentEntityIndexCreator; @@ -109,7 +119,16 @@ import com.mongodb.CursorType; import com.mongodb.MongoException; import com.mongodb.ReadPreference; import com.mongodb.WriteConcern; -import com.mongodb.client.model.*; +import com.mongodb.client.model.CountOptions; +import com.mongodb.client.model.CreateCollectionOptions; +import com.mongodb.client.model.DeleteOptions; +import com.mongodb.client.model.FindOneAndDeleteOptions; +import com.mongodb.client.model.FindOneAndReplaceOptions; +import com.mongodb.client.model.FindOneAndUpdateOptions; +import com.mongodb.client.model.ReplaceOptions; +import com.mongodb.client.model.ReturnDocument; +import com.mongodb.client.model.UpdateOptions; +import com.mongodb.client.model.ValidationOptions; import com.mongodb.client.model.changestream.FullDocument; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.InsertOneResult; @@ -1145,29 +1164,30 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati Document mappedFields = queryContext.getMappedFields(entity); Document mappedSort = queryContext.getMappedSort(entity); - return Mono.just(PersistableEntityModel.of(replacement, collectionName)) // - .doOnNext(it -> maybeEmitEvent(new BeforeConvertEvent<>(it.getSource(), it.getCollection()))) // - .flatMap(it -> maybeCallBeforeConvert(it.getSource(), it.getCollection()).map(it::mutate)) - .map(it -> it - .addTargetDocument(operations.forEntity(it.getSource()).toMappedDocument(mongoConverter).getDocument())) // - .doOnNext(it -> maybeEmitEvent(new BeforeSaveEvent(it.getSource(), it.getTarget(), it.getCollection()))) // - .flatMap(it -> { + return Mono.defer(() -> { - PersistableEntityModel flowObject = (PersistableEntityModel) it; - return maybeCallBeforeSave(flowObject.getSource(), flowObject.getTarget(), flowObject.getCollection()) - .map(potentiallyModified -> PersistableEntityModel.of(potentiallyModified, flowObject.getTarget(), - flowObject.getCollection())); - }).flatMap(it -> { + PersistableEntityModel pem = PersistableEntityModel.of(replacement, collectionName); - PersistableEntityModel flowObject = (PersistableEntityModel) it; - Mono afterFindAndReplace = doFindAndReplace(flowObject.getCollection(), mappedQuery, - mappedFields, mappedSort, queryContext.getCollation(entityType).orElse(null), - entityType, flowObject.getTarget(), options, resultType); - return afterFindAndReplace.flatMap(saved -> { - maybeEmitEvent(new AfterSaveEvent<>(saved, flowObject.getTarget(), flowObject.getCollection())); - return maybeCallAfterSave(saved, flowObject.getTarget(), flowObject.getCollection()); - }); + maybeEmitEvent(new BeforeConvertEvent<>(pem.getSource(), pem.getCollection())); + + return maybeCallBeforeConvert(pem.getSource(), pem.getCollection()).map(pem::mutate).flatMap(it -> { + PersistableEntityModel mapped = it + .addTargetDocument(operations.forEntity(it.getSource()).toMappedDocument(mongoConverter).getDocument()); + maybeEmitEvent(new BeforeSaveEvent(mapped.getSource(), mapped.getTarget(), mapped.getCollection())); + + return maybeCallBeforeSave(it.getSource(), mapped.getTarget(), mapped.getCollection()) + .map(potentiallyModified -> PersistableEntityModel.of(potentiallyModified, mapped.getTarget(), + mapped.getCollection())); + }).flatMap(it -> { + + Mono afterFindAndReplace = doFindAndReplace(it.getCollection(), mappedQuery, mappedFields, mappedSort, + queryContext.getCollation(entityType).orElse(null), entityType, it.getTarget(), options, resultType); + return afterFindAndReplace.flatMap(saved -> { + maybeEmitEvent(new AfterSaveEvent<>(saved, it.getTarget(), it.getCollection())); + return maybeCallAfterSave(saved, it.getTarget(), it.getCollection()); }); + }); + }); } /* @@ -1314,13 +1334,14 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati AdaptibleEntity entity = operations.forEntity(it.getSource(), mongoConverter.getConversionService()); entity.assertUpdateableIdIfNotSet(); - return PersistableEntityModel.of(entity.initializeVersionProperty(), + PersistableEntityModel model = PersistableEntityModel.of(entity.initializeVersionProperty(), entity.toMappedDocument(writer).getDocument(), it.getCollection()); - }).doOnNext(it -> maybeEmitEvent(new BeforeSaveEvent<>(it.getSource(), it.getTarget(), it.getCollection()))) // - .flatMap(it -> { + maybeEmitEvent(new BeforeSaveEvent<>(model.getSource(), model.getTarget(), model.getCollection())); + return model; + })// + .flatMap(it -> { return maybeCallBeforeSave(it.getSource(), it.getTarget(), it.getCollection()).map(it::mutate); - }).flatMap(it -> { return insertDocument(it.getCollection(), it.getTarget(), it.getSource().getClass()).flatMap(id -> { @@ -2588,7 +2609,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected , T> E maybeEmitEvent(E event) { - if (null != eventPublisher) { + if (eventPublisher != null) { eventPublisher.publishEvent(event); } @@ -2597,7 +2618,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected Mono maybeCallBeforeConvert(T object, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(ReactiveBeforeConvertCallback.class, object, collection); } @@ -2606,7 +2627,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected Mono maybeCallBeforeSave(T object, Document document, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(ReactiveBeforeSaveCallback.class, object, document, collection); } @@ -2615,7 +2636,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected Mono maybeCallAfterSave(T object, Document document, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(ReactiveAfterSaveCallback.class, object, document, collection); } @@ -2624,7 +2645,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected Mono maybeCallAfterConvert(T object, Document document, String collection) { - if (null != entityCallbacks) { + if (entityCallbacks != null) { return entityCallbacks.callback(ReactiveAfterConvertCallback.class, object, document, collection); } @@ -3092,23 +3113,18 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati maybeEmitEvent(new AfterLoadEvent<>(document, type, collectionName)); T source = reader.read(type, document); - if (null != source) { + if (source != null) { maybeEmitEvent(new AfterConvertEvent<>(document, source, collectionName)); + return maybeCallAfterConvert(source, document, collectionName); } - return Mono.defer(() -> { - if (null != source) { - return maybeCallAfterConvert(source, document, collectionName); - } else { - return Mono.empty(); - } - }); + + return Mono.empty(); } } /** - * {@link DocumentCallback} transforming {@link Document} into the given {@code targetType} or - * decorating the {@code sourceType} with a {@literal projection} in case the {@code targetType} is an - * {@literal interface}. + * {@link DocumentCallback} transforming {@link Document} into the given {@code targetType} or decorating the + * {@code sourceType} with a {@literal projection} in case the {@code targetType} is an {@literal interface}. * * @param * @param @@ -3137,17 +3153,12 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati Object result = targetType.isInterface() ? projectionFactory.createProjection(targetType, source) : source; T castEntity = (T) result; - if (null != castEntity) { + if (castEntity != null) { maybeEmitEvent(new AfterConvertEvent<>(document, castEntity, collectionName)); + return maybeCallAfterConvert(castEntity, document, collectionName); } - return Mono.defer(() -> { - if (null != castEntity) { - return maybeCallAfterConvert(castEntity, document, collectionName); - } else { - return Mono.empty(); - } - }); + return Mono.empty(); } } @@ -3184,15 +3195,18 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati public Mono> doWith(Document object) { - final double distance; + double distance = getDistance(object); + + return delegate.doWith(object).map(doWith -> new GeoResult<>(doWith, new Distance(distance, metric))); + } + + double getDistance(Document object) { + if (object.containsKey(distanceField)) { - distance = NumberUtils.convertNumberToTargetClass(object.get(distanceField, Number.class), Double.class); - } else { - distance = Double.NaN; + return NumberUtils.convertNumberToTargetClass(object.get(distanceField, Number.class), Double.class); } - - return delegate.doWith(object) - .map(doWith -> new GeoResult<>(doWith, new Distance(distance, metric))); + + return Double.NaN; } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterConvertCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterConvertCallback.java index 3dc4f0417..7ff740a42 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterConvertCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterConvertCallback.java @@ -19,22 +19,24 @@ import org.bson.Document; import org.springframework.data.mapping.callback.EntityCallback; /** - * Callback being invoked after a domain object is converted from a Document (when reading from the DB). + * Callback being invoked after a domain object is materialized from a {@link Document} when reading results. * * @author Roman Puchkovskiy + * @author Mark Paluch * @since 3.0 + * @see org.springframework.data.mapping.callback.EntityCallbacks */ @FunctionalInterface public interface AfterConvertCallback extends EntityCallback { /** - * Entity callback method invoked after a domain object is converted from a Document. Can return either the same - * or a modified instance of the domain object. + * Entity callback method invoked after a domain object is materialized from a {@link Document}. Can return either the + * same or a modified instance of the domain object. * * @param entity the domain object (the result of the conversion). * @param document must not be {@literal null}. * @param collection name of the collection. - * @return the domain object that is the result of the conversion from the Document. + * @return the domain object that is the result of reading it from the {@link Document}. */ T onAfterConvert(T entity, Document document, String collection); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterSaveCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterSaveCallback.java index c22597ca4..bd2152dab 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterSaveCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AfterSaveCallback.java @@ -19,7 +19,7 @@ import org.bson.Document; import org.springframework.data.mapping.callback.EntityCallback; /** - * Entity callback triggered after save of a document. + * Entity callback triggered after save of a {@link Document}. * * @author Roman Puchkovskiy * @since 3.0 @@ -28,8 +28,8 @@ import org.springframework.data.mapping.callback.EntityCallback; public interface AfterSaveCallback extends EntityCallback { /** - * Entity callback method invoked after a domain object is saved. Can return either the same or a modified instance - * of the domain object. + * Entity callback method invoked after a domain object is saved. Can return either the same or a modified instance of + * the domain object. * * @param entity the domain object that was saved. * @param document {@link Document} representing the {@code entity}. diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeConvertCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeConvertCallback.java index c8a43c193..9b512b0e2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeConvertCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeConvertCallback.java @@ -22,6 +22,7 @@ import org.springframework.data.mapping.callback.EntityCallback; * * @author Mark Paluch * @since 2.2 + * @see org.springframework.data.mapping.callback.EntityCallbacks */ @FunctionalInterface public interface BeforeConvertCallback extends EntityCallback { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeSaveCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeSaveCallback.java index cdb0e2424..2c8312508 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeSaveCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/BeforeSaveCallback.java @@ -24,6 +24,7 @@ import org.springframework.data.mapping.callback.EntityCallback; * @author Mark Paluch * @author Michael J. Simons * @since 2.2 + * @see org.springframework.data.mapping.callback.EntityCallbacks */ @FunctionalInterface public interface BeforeSaveCallback extends EntityCallback { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterConvertCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterConvertCallback.java index 7a273cf15..5ff16dd3d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterConvertCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterConvertCallback.java @@ -17,27 +17,28 @@ package org.springframework.data.mongodb.core.mapping.event; import org.bson.Document; import org.reactivestreams.Publisher; + import org.springframework.data.mapping.callback.EntityCallback; -import org.springframework.data.mapping.callback.ReactiveEntityCallbacks; /** - * Callback being invoked after a domain object is converted from a Document (when reading from the DB). + * Callback being invoked after a domain object is materialized from a {@link Document} when reading results. * * @author Roman Puchkovskiy + * @author Mark Paluch * @since 3.0 - * @see ReactiveEntityCallbacks + * @see org.springframework.data.mapping.callback.ReactiveEntityCallbacks */ @FunctionalInterface public interface ReactiveAfterConvertCallback extends EntityCallback { /** - * Entity callback method invoked after a domain object is converted from a Document. Can return either the same - * or a modified instance of the domain object. + * Entity callback method invoked after a domain object is materialized from a {@link Document}. Can return either the + * same or a modified instance of the domain object. * * @param entity the domain object (the result of the conversion). * @param document must not be {@literal null}. * @param collection name of the collection. - * @return a {@link Publisher} emitting the domain object that is the result of the conversion from the Document. + * @return a {@link Publisher} emitting the domain object that is the result of reading it from the {@link Document}. */ Publisher onAfterConvert(T entity, Document document, String collection); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterSaveCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterSaveCallback.java index 64eda738f..81a209d30 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterSaveCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAfterSaveCallback.java @@ -22,7 +22,7 @@ import org.springframework.data.mapping.callback.EntityCallback; import org.springframework.data.mapping.callback.ReactiveEntityCallbacks; /** - * Entity callback triggered after save of a document. + * Entity callback triggered after save of a {@link Document}. * * @author Roman Puchkovskiy * @since 3.0 @@ -32,8 +32,8 @@ import org.springframework.data.mapping.callback.ReactiveEntityCallbacks; public interface ReactiveAfterSaveCallback extends EntityCallback { /** - * Entity callback method invoked after a domain object is saved. Can return either the same or a modified instance - * of the domain object. + * Entity callback method invoked after a domain object is saved. Can return either the same or a modified instance of + * the domain object. * * @param entity the domain object that was saved. * @param document {@link Document} representing the {@code entity}. diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeConvertCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeConvertCallback.java index a82ca01b9..159084800 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeConvertCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeConvertCallback.java @@ -18,14 +18,13 @@ package org.springframework.data.mongodb.core.mapping.event; import org.reactivestreams.Publisher; import org.springframework.data.mapping.callback.EntityCallback; -import org.springframework.data.mapping.callback.ReactiveEntityCallbacks; /** * Callback being invoked before a domain object is converted to be persisted. * * @author Mark Paluch * @since 2.2 - * @see ReactiveEntityCallbacks + * @see org.springframework.data.mapping.callback.ReactiveEntityCallbacks */ @FunctionalInterface public interface ReactiveBeforeConvertCallback extends EntityCallback { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeSaveCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeSaveCallback.java index 3f50ac291..b8001e2f2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeSaveCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveBeforeSaveCallback.java @@ -19,14 +19,13 @@ import org.bson.Document; import org.reactivestreams.Publisher; import org.springframework.data.mapping.callback.EntityCallback; -import org.springframework.data.mapping.callback.ReactiveEntityCallbacks; /** * Entity callback triggered before save of a document. * * @author Mark Paluch * @since 2.2 - * @see ReactiveEntityCallbacks + * @see org.springframework.data.mapping.callback.ReactiveEntityCallbacks */ @FunctionalInterface public interface ReactiveBeforeSaveCallback extends EntityCallback { 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 5539f5391..44dfead8b 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 @@ -19,7 +19,9 @@ import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; import static org.springframework.data.mongodb.test.util.Assertions.*; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.math.BigInteger; import java.time.Duration; @@ -39,7 +41,6 @@ import org.assertj.core.api.Assertions; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -103,7 +104,6 @@ import org.springframework.lang.Nullable; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.CollectionUtils; -import com.google.common.collect.ImmutableMap; import com.mongodb.MongoClientSettings; import com.mongodb.MongoException; import com.mongodb.MongoNamespace; @@ -143,7 +143,7 @@ import com.mongodb.client.result.UpdateResult; @MockitoSettings(strictness = Strictness.LENIENT) public class MongoTemplateUnitTests extends MongoOperationsUnitTests { - MongoTemplate template; + private MongoTemplate template; @Mock MongoDatabaseFactory factory; @Mock MongoClient mongo; @@ -158,14 +158,14 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { @Mock UpdateResult updateResult; @Mock DeleteResult deleteResult; - Document commandResultDocument = new Document(); + private Document commandResultDocument = new Document(); - MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator(); - MappingMongoConverter converter; - MongoMappingContext mappingContext; + private MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator(); + private MappingMongoConverter converter; + private MongoMappingContext mappingContext; @BeforeEach - public void beforeEach() { + void beforeEach() { when(findIterable.iterator()).thenReturn(cursor); when(factory.getMongoDatabase()).thenReturn(db); @@ -214,23 +214,23 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test - public void rejectsNullDatabaseName() { + void rejectsNullDatabaseName() { assertThatIllegalArgumentException().isThrownBy(() -> new MongoTemplate(mongo, null)); } @Test // DATAMONGO-1968 - public void rejectsNullMongo() { + void rejectsNullMongo() { assertThatIllegalArgumentException().isThrownBy(() -> new MongoTemplate((MongoClient) null, "database")); } @Test // DATAMONGO-1968 - public void rejectsNullMongoClient() { + void rejectsNullMongoClient() { assertThatIllegalArgumentException() .isThrownBy(() -> new MongoTemplate((com.mongodb.client.MongoClient) null, "database")); } @Test // DATAMONGO-1870 - public void removeHandlesMongoExceptionProperly() { + void removeHandlesMongoExceptionProperly() { MongoTemplate template = mockOutGetDb(); @@ -238,13 +238,13 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test - public void defaultsConverterToMappingMongoConverter() { + void defaultsConverterToMappingMongoConverter() { MongoTemplate template = new MongoTemplate(mongo, "database"); assertThat(ReflectionTestUtils.getField(template, "mongoConverter") instanceof MappingMongoConverter).isTrue(); } @Test - public void rejectsNotFoundMapReduceResource() { + void rejectsNotFoundMapReduceResource() { GenericApplicationContext ctx = new GenericApplicationContext(); ctx.refresh(); @@ -255,14 +255,14 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-322 - public void rejectsEntityWithNullIdIfNotSupportedIdType() { + void rejectsEntityWithNullIdIfNotSupportedIdType() { Object entity = new NotAutogenerateableId(); assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(() -> template.save(entity)); } @Test // DATAMONGO-322 - public void storesEntityWithSetIdAlthoughNotAutogenerateable() { + void storesEntityWithSetIdAlthoughNotAutogenerateable() { NotAutogenerateableId entity = new NotAutogenerateableId(); entity.id = 1; @@ -271,7 +271,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-322 - public void autogeneratesIdForEntityWithAutogeneratableId() { + void autogeneratesIdForEntityWithAutogeneratableId() { this.converter.afterPropertiesSet(); @@ -285,7 +285,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1912 - public void autogeneratesIdForMap() { + void autogeneratesIdForMap() { MongoTemplate template = spy(this.template); doReturn(new ObjectId()).when(template).saveDocument(any(String.class), any(Document.class), any(Class.class)); @@ -297,7 +297,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-374 - public void convertsUpdateConstraintsUsingConverters() { + void convertsUpdateConstraintsUsingConverters() { CustomConversions conversions = new MongoCustomConversions(Collections.singletonList(MyConverter.INSTANCE)); this.converter.setCustomConversions(conversions); @@ -315,7 +315,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-474 - public void setsUnpopulatedIdField() { + void setsUnpopulatedIdField() { NotAutogenerateableId entity = new NotAutogenerateableId(); @@ -324,7 +324,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-474 - public void doesNotSetAlreadyPopulatedId() { + void doesNotSetAlreadyPopulatedId() { NotAutogenerateableId entity = new NotAutogenerateableId(); entity.id = 5; @@ -334,7 +334,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-868 - public void findAndModifyShouldBumpVersionByOneWhenVersionFieldNotIncludedInUpdate() { + void findAndModifyShouldBumpVersionByOneWhenVersionFieldNotIncludedInUpdate() { VersionedEntity v = new VersionedEntity(); v.id = 1; @@ -350,7 +350,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-868 - public void findAndModifyShouldNotBumpVersionByOneWhenVersionFieldAlreadyIncludedInUpdate() { + void findAndModifyShouldNotBumpVersionByOneWhenVersionFieldAlreadyIncludedInUpdate() { VersionedEntity v = new VersionedEntity(); v.id = 1; @@ -368,7 +368,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-533 - public void registersDefaultEntityIndexCreatorIfApplicationContextHasOneForDifferentMappingContext() { + void registersDefaultEntityIndexCreatorIfApplicationContextHasOneForDifferentMappingContext() { GenericApplicationContext applicationContext = new GenericApplicationContext(); applicationContext.getBeanFactory().registerSingleton("foo", @@ -390,7 +390,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-566 - public void findAllAndRemoveShouldRetrieveMatchingDocumentsPriorToRemoval() { + void findAllAndRemoveShouldRetrieveMatchingDocumentsPriorToRemoval() { BasicQuery query = new BasicQuery("{'foo':'bar'}"); template.findAllAndRemove(query, VersionedEntity.class); @@ -398,7 +398,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-566 - public void findAllAndRemoveShouldRemoveDocumentsReturedByFindQuery() { + void findAllAndRemoveShouldRemoveDocumentsReturedByFindQuery() { Mockito.when(cursor.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false); Mockito.when(cursor.next()).thenReturn(new org.bson.Document("_id", Integer.valueOf(0))) @@ -415,14 +415,14 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-566 - public void findAllAndRemoveShouldNotTriggerRemoveIfFindResultIsEmpty() { + void findAllAndRemoveShouldNotTriggerRemoveIfFindResultIsEmpty() { template.findAllAndRemove(new BasicQuery("{'foo':'bar'}"), VersionedEntity.class); verify(collection, never()).deleteMany(any(org.bson.Document.class)); } @Test // DATAMONGO-948 - public void sortShouldBeTakenAsIsWhenExecutingQueryWithoutSpecificTypeInformation() { + void sortShouldBeTakenAsIsWhenExecutingQueryWithoutSpecificTypeInformation() { Query query = Query.query(Criteria.where("foo").is("bar")).with(Sort.by("foo")); template.executeQuery(query, "collection1", new DocumentCallbackHandler() { @@ -440,7 +440,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1166, DATAMONGO-1824 - public void aggregateShouldHonorReadPreferenceWhenSet() { + void aggregateShouldHonorReadPreferenceWhenSet() { template.setReadPreference(ReadPreference.secondary()); @@ -450,7 +450,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1166, DATAMONGO-1824 - public void aggregateShouldIgnoreReadPreferenceWhenNotSet() { + void aggregateShouldIgnoreReadPreferenceWhenNotSet() { template.aggregate(newAggregation(Aggregation.unwind("foo")), "collection-1", Wrapper.class); @@ -458,7 +458,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2153 - public void aggregateShouldHonorOptionsComment() { + void aggregateShouldHonorOptionsComment() { AggregationOptions options = AggregationOptions.builder().comment("expensive").build(); @@ -468,7 +468,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1166, DATAMONGO-2264 - public void geoNearShouldHonorReadPreferenceWhenSet() { + void geoNearShouldHonorReadPreferenceWhenSet() { template.setReadPreference(ReadPreference.secondary()); @@ -479,7 +479,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1166, DATAMONGO-2264 - public void geoNearShouldIgnoreReadPreferenceWhenNotSet() { + void geoNearShouldIgnoreReadPreferenceWhenNotSet() { NearQuery query = NearQuery.near(new Point(1, 1)); template.geoNear(query, Wrapper.class); @@ -489,7 +489,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { @Test // DATAMONGO-1334 @Disabled("TODO: mongo3 - a bit hard to tests with the immutable object stuff") - public void mapReduceShouldUseZeroAsDefaultLimit() { + void mapReduceShouldUseZeroAsDefaultLimit() { MongoCursor cursor = mock(MongoCursor.class); MapReduceIterable output = mock(MapReduceIterable.class); @@ -509,7 +509,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1334 - public void mapReduceShouldPickUpLimitFromQuery() { + void mapReduceShouldPickUpLimitFromQuery() { MongoCursor cursor = mock(MongoCursor.class); MapReduceIterable output = mock(MapReduceIterable.class); @@ -530,7 +530,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1334 - public void mapReduceShouldPickUpLimitFromOptions() { + void mapReduceShouldPickUpLimitFromOptions() { MongoCursor cursor = mock(MongoCursor.class); MapReduceIterable output = mock(MapReduceIterable.class); @@ -551,7 +551,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1334 - public void mapReduceShouldPickUpLimitFromOptionsWhenQueryIsNotPresent() { + void mapReduceShouldPickUpLimitFromOptionsWhenQueryIsNotPresent() { MongoCursor cursor = mock(MongoCursor.class); MapReduceIterable output = mock(MapReduceIterable.class); @@ -570,7 +570,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1334 - public void mapReduceShouldPickUpLimitFromOptionsEvenWhenQueryDefinesItDifferently() { + void mapReduceShouldPickUpLimitFromOptionsEvenWhenQueryDefinesItDifferently() { MongoCursor cursor = mock(MongoCursor.class); MapReduceIterable output = mock(MapReduceIterable.class); @@ -592,7 +592,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1639 - public void beforeConvertEventForUpdateSeesNextVersion() { + void beforeConvertEventForUpdateSeesNextVersion() { when(updateResult.getModifiedCount()).thenReturn(1L); @@ -616,7 +616,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1447 - public void shouldNotAppend$isolatedToNonMulitUpdate() { + void shouldNotAppend$isolatedToNonMulitUpdate() { template.updateFirst(new Query(), new Update().isolated().set("jon", "snow"), Wrapper.class); @@ -630,7 +630,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1447 - public void shouldAppend$isolatedToUpdateMultiEmptyQuery() { + void shouldAppend$isolatedToUpdateMultiEmptyQuery() { template.updateMulti(new Query(), new Update().isolated().set("jon", "snow"), Wrapper.class); @@ -644,7 +644,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1447 - public void shouldAppend$isolatedToUpdateMultiQueryIfNotPresentAndUpdateSetsValue() { + void shouldAppend$isolatedToUpdateMultiQueryIfNotPresentAndUpdateSetsValue() { Update update = new Update().isolated().set("jon", "snow"); Query query = new BasicQuery("{'eddard':'stark'}"); @@ -661,7 +661,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1447 - public void shouldNotAppend$isolatedToUpdateMultiQueryIfNotPresentAndUpdateDoesNotSetValue() { + void shouldNotAppend$isolatedToUpdateMultiQueryIfNotPresentAndUpdateDoesNotSetValue() { Update update = new Update().set("jon", "snow"); Query query = new BasicQuery("{'eddard':'stark'}"); @@ -678,7 +678,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1447 - public void shouldNotOverwrite$isolatedToUpdateMultiQueryIfPresentAndUpdateDoesNotSetValue() { + void shouldNotOverwrite$isolatedToUpdateMultiQueryIfPresentAndUpdateDoesNotSetValue() { Update update = new Update().set("jon", "snow"); Query query = new BasicQuery("{'eddard':'stark', '$isolated' : 1}"); @@ -695,7 +695,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1447 - public void shouldNotOverwrite$isolatedToUpdateMultiQueryIfPresentAndUpdateSetsValue() { + void shouldNotOverwrite$isolatedToUpdateMultiQueryIfPresentAndUpdateSetsValue() { Update update = new Update().isolated().set("jon", "snow"); Query query = new BasicQuery("{'eddard':'stark', '$isolated' : 0}"); @@ -712,7 +712,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1311 - public void executeQueryShouldUseBatchSizeWhenPresent() { + void executeQueryShouldUseBatchSizeWhenPresent() { when(findIterable.batchSize(anyInt())).thenReturn(findIterable); @@ -723,7 +723,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void executeQueryShouldUseCollationWhenPresent() { + void executeQueryShouldUseCollationWhenPresent() { template.executeQuery(new BasicQuery("{}").collation(Collation.of("fr")), "collection-1", val -> {}); @@ -731,7 +731,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void streamQueryShouldUseCollationWhenPresent() { + void streamQueryShouldUseCollationWhenPresent() { template.stream(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class).next(); @@ -739,7 +739,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void findShouldUseCollationWhenPresent() { + void findShouldUseCollationWhenPresent() { template.find(new BasicQuery("{'foo' : 'bar'}").collation(Collation.of("fr")), AutogenerateableId.class); @@ -747,7 +747,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void findOneShouldUseCollationWhenPresent() { + void findOneShouldUseCollationWhenPresent() { template.findOne(new BasicQuery("{'foo' : 'bar'}").collation(Collation.of("fr")), AutogenerateableId.class); @@ -755,7 +755,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void existsShouldUseCollationWhenPresent() { + void existsShouldUseCollationWhenPresent() { template.exists(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class); @@ -767,7 +767,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void findAndModfiyShoudUseCollationWhenPresent() { + void findAndModfiyShoudUseCollationWhenPresent() { template.findAndModify(new BasicQuery("{}").collation(Collation.of("fr")), new Update(), AutogenerateableId.class); @@ -778,7 +778,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void findAndRemoveShouldUseCollationWhenPresent() { + void findAndRemoveShouldUseCollationWhenPresent() { template.findAndRemove(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class); @@ -789,7 +789,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2196 - public void removeShouldApplyWriteConcern() { + void removeShouldApplyWriteConcern() { Person person = new Person(); person.id = "id-1"; @@ -802,7 +802,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void findAndRemoveManyShouldUseCollationWhenPresent() { + void findAndRemoveManyShouldUseCollationWhenPresent() { template.doRemove("collection-1", new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class, true); @@ -814,7 +814,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void updateOneShouldUseCollationWhenPresent() { + void updateOneShouldUseCollationWhenPresent() { template.updateFirst(new BasicQuery("{}").collation(Collation.of("fr")), new Update().set("foo", "bar"), AutogenerateableId.class); @@ -826,7 +826,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void updateManyShouldUseCollationWhenPresent() { + void updateManyShouldUseCollationWhenPresent() { template.updateMulti(new BasicQuery("{}").collation(Collation.of("fr")), new Update().set("foo", "bar"), AutogenerateableId.class); @@ -838,7 +838,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void replaceOneShouldUseCollationWhenPresent() { + void replaceOneShouldUseCollationWhenPresent() { template.updateFirst(new BasicQuery("{}").collation(Collation.of("fr")), new Update(), AutogenerateableId.class); @@ -849,7 +849,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518, DATAMONGO-1824 - public void aggregateShouldUseCollationWhenPresent() { + void aggregateShouldUseCollationWhenPresent() { Aggregation aggregation = newAggregation(project("id")) .withOptions(newAggregationOptions().collation(Collation.of("fr")).build()); @@ -859,7 +859,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1824 - public void aggregateShouldUseBatchSizeWhenPresent() { + void aggregateShouldUseBatchSizeWhenPresent() { Aggregation aggregation = newAggregation(project("id")) .withOptions(newAggregationOptions().collation(Collation.of("fr")).cursorBatchSize(100).build()); @@ -869,7 +869,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void mapReduceShouldUseCollationWhenPresent() { + void mapReduceShouldUseCollationWhenPresent() { template.mapReduce("", "", "", MapReduceOptions.options().collation(Collation.of("fr")), AutogenerateableId.class); @@ -877,7 +877,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2027 - public void mapReduceShouldUseOutputCollectionWhenPresent() { + void mapReduceShouldUseOutputCollectionWhenPresent() { template.mapReduce("", "", "", MapReduceOptions.options().outputCollection("out-collection"), AutogenerateableId.class); @@ -886,7 +886,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2027 - public void mapReduceShouldNotUseOutputCollectionForInline() { + void mapReduceShouldNotUseOutputCollectionForInline() { template.mapReduce("", "", "", MapReduceOptions.options().outputCollection("out-collection").outputTypeInline(), AutogenerateableId.class); @@ -895,7 +895,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2027 - public void mapReduceShouldUseOutputActionWhenPresent() { + void mapReduceShouldUseOutputActionWhenPresent() { template.mapReduce("", "", "", MapReduceOptions.options().outputCollection("out-collection").outputTypeMerge(), AutogenerateableId.class); @@ -904,7 +904,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2027 - public void mapReduceShouldUseOutputDatabaseWhenPresent() { + void mapReduceShouldUseOutputDatabaseWhenPresent() { template.mapReduce("", "", "", MapReduceOptions.options().outputDatabase("out-database").outputCollection("out-collection").outputTypeMerge(), @@ -914,7 +914,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2027 - public void mapReduceShouldNotUseOutputDatabaseForInline() { + void mapReduceShouldNotUseOutputDatabaseForInline() { template.mapReduce("", "", "", MapReduceOptions.options().outputDatabase("out-database").outputTypeInline(), AutogenerateableId.class); @@ -923,7 +923,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518, DATAMONGO-2264 - public void geoNearShouldUseCollationWhenPresent() { + void geoNearShouldUseCollationWhenPresent() { NearQuery query = NearQuery.near(0D, 0D).query(new BasicQuery("{}").collation(Collation.of("fr"))); template.geoNear(query, AutogenerateableId.class); @@ -932,7 +932,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1518 - public void groupShouldUseCollationWhenPresent() { + void groupShouldUseCollationWhenPresent() { commandResultDocument.append("retval", Collections.emptySet()); template.group("collection-1", GroupBy.key("id").reduceFunction("bar").collation(Collation.of("fr")), @@ -946,7 +946,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1880 - public void countShouldUseCollationWhenPresent() { + void countShouldUseCollationWhenPresent() { template.count(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class); @@ -958,7 +958,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2360 - public void countShouldApplyQueryHintIfPresent() { + void countShouldApplyQueryHintIfPresent() { Document queryHint = new Document("age", 1); template.count(new BasicQuery("{}").withHint(queryHint), AutogenerateableId.class); @@ -970,7 +970,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2365 - public void countShouldApplyQueryHintAsIndexNameIfPresent() { + void countShouldApplyQueryHintAsIndexNameIfPresent() { template.count(new BasicQuery("{}").withHint("idx-1"), AutogenerateableId.class); @@ -981,7 +981,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733 - public void appliesFieldsWhenInterfaceProjectionIsClosedAndQueryDoesNotDefineFields() { + void appliesFieldsWhenInterfaceProjectionIsClosedAndQueryDoesNotDefineFields() { template.doFind("star-wars", new Document(), new Document(), Person.class, PersonProjection.class, CursorPreparer.NO_OP_PREPARER); @@ -990,7 +990,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733 - public void doesNotApplyFieldsWhenInterfaceProjectionIsClosedAndQueryDefinesFields() { + void doesNotApplyFieldsWhenInterfaceProjectionIsClosedAndQueryDefinesFields() { template.doFind("star-wars", new Document(), new Document("bar", 1), Person.class, PersonProjection.class, CursorPreparer.NO_OP_PREPARER); @@ -999,7 +999,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733 - public void doesNotApplyFieldsWhenInterfaceProjectionIsOpen() { + void doesNotApplyFieldsWhenInterfaceProjectionIsOpen() { template.doFind("star-wars", new Document(), new Document(), Person.class, PersonSpELProjection.class, CursorPreparer.NO_OP_PREPARER); @@ -1008,7 +1008,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733, DATAMONGO-2041 - public void appliesFieldsToDtoProjection() { + void appliesFieldsToDtoProjection() { template.doFind("star-wars", new Document(), new Document(), Person.class, Jedi.class, CursorPreparer.NO_OP_PREPARER); @@ -1017,7 +1017,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733 - public void doesNotApplyFieldsToDtoProjectionWhenQueryDefinesFields() { + void doesNotApplyFieldsToDtoProjectionWhenQueryDefinesFields() { template.doFind("star-wars", new Document(), new Document("bar", 1), Person.class, Jedi.class, CursorPreparer.NO_OP_PREPARER); @@ -1026,7 +1026,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733 - public void doesNotApplyFieldsWhenTargetIsNotAProjection() { + void doesNotApplyFieldsWhenTargetIsNotAProjection() { template.doFind("star-wars", new Document(), new Document(), Person.class, Person.class, CursorPreparer.NO_OP_PREPARER); @@ -1035,7 +1035,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1733 - public void doesNotApplyFieldsWhenTargetExtendsDomainType() { + void doesNotApplyFieldsWhenTargetExtendsDomainType() { template.doFind("star-wars", new Document(), new Document(), Person.class, PersonExtended.class, CursorPreparer.NO_OP_PREPARER); @@ -1044,7 +1044,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1348, DATAMONGO-2264 - public void geoNearShouldMapQueryCorrectly() { + void geoNearShouldMapQueryCorrectly() { NearQuery query = NearQuery.near(new Point(1, 1)); query.query(Query.query(Criteria.where("customName").is("rand al'thor"))); @@ -1061,7 +1061,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1348, DATAMONGO-2264 - public void geoNearShouldMapGeoJsonPointCorrectly() { + void geoNearShouldMapGeoJsonPointCorrectly() { NearQuery query = NearQuery.near(new GeoJsonPoint(1, 2)); query.query(Query.query(Criteria.where("customName").is("rand al'thor"))); @@ -1078,7 +1078,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2155 - public void saveVersionedEntityShouldCallUpdateCorrectly() { + void saveVersionedEntityShouldCallUpdateCorrectly() { when(updateResult.getModifiedCount()).thenReturn(1L); @@ -1099,7 +1099,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1783 - public void usesQueryOffsetForCountOperation() { + void usesQueryOffsetForCountOperation() { template.count(new BasicQuery("{}").skip(100), AutogenerateableId.class); @@ -1110,7 +1110,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1783 - public void usesQueryLimitForCountOperation() { + void usesQueryLimitForCountOperation() { template.count(new BasicQuery("{}").limit(10), AutogenerateableId.class); @@ -1121,7 +1121,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2215 - public void updateShouldApplyArrayFilters() { + void updateShouldApplyArrayFilters() { template.updateFirst(new BasicQuery("{}"), new Update().set("grades.$[element]", 100).filterArray(Criteria.where("element").gte(100)), @@ -1135,7 +1135,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2215 - public void findAndModifyShouldApplyArrayFilters() { + void findAndModifyShouldApplyArrayFilters() { template.findAndModify(new BasicQuery("{}"), new Update().set("grades.$[element]", 100).filterArray(Criteria.where("element").gte(100)), @@ -1149,7 +1149,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void streamQueryShouldUseDefaultCollationWhenPresent() { + void streamQueryShouldUseDefaultCollationWhenPresent() { template.stream(new BasicQuery("{}"), Sith.class).next(); @@ -1157,7 +1157,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findShouldNotUseCollationWhenNoDefaultPresent() { + void findShouldNotUseCollationWhenNoDefaultPresent() { template.find(new BasicQuery("{'foo' : 'bar'}"), Jedi.class); @@ -1165,7 +1165,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findShouldUseDefaultCollationWhenPresent() { + void findShouldUseDefaultCollationWhenPresent() { template.find(new BasicQuery("{'foo' : 'bar'}"), Sith.class); @@ -1173,7 +1173,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findOneShouldUseDefaultCollationWhenPresent() { + void findOneShouldUseDefaultCollationWhenPresent() { template.findOne(new BasicQuery("{'foo' : 'bar'}"), Sith.class); @@ -1181,7 +1181,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void existsShouldUseDefaultCollationWhenPresent() { + void existsShouldUseDefaultCollationWhenPresent() { template.exists(new BasicQuery("{}"), Sith.class); @@ -1193,7 +1193,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findAndModfiyShoudUseDefaultCollationWhenPresent() { + void findAndModfiyShoudUseDefaultCollationWhenPresent() { template.findAndModify(new BasicQuery("{}"), new Update(), Sith.class); @@ -1205,7 +1205,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findAndRemoveShouldUseDefaultCollationWhenPresent() { + void findAndRemoveShouldUseDefaultCollationWhenPresent() { template.findAndRemove(new BasicQuery("{}"), Sith.class); @@ -1217,7 +1217,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldNotCollationIfNotPresent() { + void createCollectionShouldNotCollationIfNotPresent() { template.createCollection(AutogenerateableId.class); @@ -1228,7 +1228,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldApplyDefaultCollation() { + void createCollectionShouldApplyDefaultCollation() { template.createCollection(Sith.class); @@ -1240,7 +1240,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldFavorExplicitOptionsOverDefaultCollation() { + void createCollectionShouldFavorExplicitOptionsOverDefaultCollation() { template.createCollection(Sith.class, CollectionOptions.just(Collation.of("en_US"))); @@ -1252,7 +1252,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldUseDefaultCollationIfCollectionOptionsAreNull() { + void createCollectionShouldUseDefaultCollationIfCollectionOptionsAreNull() { template.createCollection(Sith.class, null); @@ -1264,7 +1264,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void aggreateShouldUseDefaultCollationIfPresent() { + void aggreateShouldUseDefaultCollationIfPresent() { template.aggregate(newAggregation(Sith.class, project("id")), AutogenerateableId.class, Document.class); @@ -1272,7 +1272,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void aggreateShouldUseCollationFromOptionsEvenIfDefaultCollationIsPresent() { + void aggreateShouldUseCollationFromOptionsEvenIfDefaultCollationIsPresent() { template.aggregateStream(newAggregation(Sith.class, project("id")).withOptions( newAggregationOptions().collation(Collation.of("fr")).build()), AutogenerateableId.class, Document.class); @@ -1281,7 +1281,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void aggreateStreamShouldUseDefaultCollationIfPresent() { + void aggreateStreamShouldUseDefaultCollationIfPresent() { template.aggregate(newAggregation(Sith.class, project("id")), AutogenerateableId.class, Document.class); @@ -1289,7 +1289,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void aggreateStreamShouldUseCollationFromOptionsEvenIfDefaultCollationIsPresent() { + void aggreateStreamShouldUseCollationFromOptionsEvenIfDefaultCollationIsPresent() { template.aggregateStream(newAggregation(Sith.class, project("id")).withOptions( newAggregationOptions().collation(Collation.of("fr")).build()), AutogenerateableId.class, Document.class); @@ -1298,7 +1298,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2390 - public void aggregateShouldNoApplyZeroOrNegativeMaxTime() { + void aggregateShouldNoApplyZeroOrNegativeMaxTime() { template.aggregate( newAggregation(Sith.class, project("id")).withOptions(newAggregationOptions().maxTime(Duration.ZERO).build()), @@ -1310,7 +1310,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2390 - public void aggregateShouldApplyMaxTimeIfSet() { + void aggregateShouldApplyMaxTimeIfSet() { template.aggregate(newAggregation(Sith.class, project("id")).withOptions( newAggregationOptions().maxTime(Duration.ofSeconds(10)).build()), AutogenerateableId.class, Document.class); @@ -1319,7 +1319,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findAndReplaceShouldUseCollationWhenPresent() { + void findAndReplaceShouldUseCollationWhenPresent() { template.findAndReplace(new BasicQuery("{}").collation(Collation.of("fr")), new AutogenerateableId()); @@ -1330,7 +1330,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findOneWithSortShouldUseCollationWhenPresent() { + void findOneWithSortShouldUseCollationWhenPresent() { template.findOne(new BasicQuery("{}").collation(Collation.of("fr")).with(Sort.by("id")), Sith.class); @@ -1338,7 +1338,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findOneWithSortShouldUseDefaultCollationWhenPresent() { + void findOneWithSortShouldUseDefaultCollationWhenPresent() { template.findOne(new BasicQuery("{}").with(Sort.by("id")), Sith.class); @@ -1346,7 +1346,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findAndReplaceShouldUseDefaultCollationWhenPresent() { + void findAndReplaceShouldUseDefaultCollationWhenPresent() { template.findAndReplace(new BasicQuery("{}"), new Sith()); @@ -1357,7 +1357,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findAndReplaceShouldUseCollationEvenIfDefaultCollationIsPresent() { + void findAndReplaceShouldUseCollationEvenIfDefaultCollationIsPresent() { template.findAndReplace(new BasicQuery("{}").collation(Collation.of("fr")), new Sith()); @@ -1368,7 +1368,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findDistinctShouldUseDefaultCollationWhenPresent() { + void findDistinctShouldUseDefaultCollationWhenPresent() { template.findDistinct(new BasicQuery("{}"), "name", Sith.class, String.class); @@ -1376,7 +1376,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void findDistinctPreferCollationFromQueryOverDefaultCollation() { + void findDistinctPreferCollationFromQueryOverDefaultCollation() { template.findDistinct(new BasicQuery("{}").collation(Collation.of("fr")), "name", Sith.class, String.class); @@ -1384,7 +1384,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void updateFirstShouldUseDefaultCollationWhenPresent() { + void updateFirstShouldUseDefaultCollationWhenPresent() { template.updateFirst(new BasicQuery("{}"), Update.update("foo", "bar"), Sith.class); @@ -1396,7 +1396,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void updateFirstShouldPreferExplicitCollationOverDefaultCollation() { + void updateFirstShouldPreferExplicitCollationOverDefaultCollation() { template.updateFirst(new BasicQuery("{}").collation(Collation.of("fr")), Update.update("foo", "bar"), Sith.class); @@ -1408,7 +1408,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void updateMultiShouldUseDefaultCollationWhenPresent() { + void updateMultiShouldUseDefaultCollationWhenPresent() { template.updateMulti(new BasicQuery("{}"), Update.update("foo", "bar"), Sith.class); @@ -1420,7 +1420,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void updateMultiShouldPreferExplicitCollationOverDefaultCollation() { + void updateMultiShouldPreferExplicitCollationOverDefaultCollation() { template.updateMulti(new BasicQuery("{}").collation(Collation.of("fr")), Update.update("foo", "bar"), Sith.class); @@ -1432,7 +1432,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void removeShouldUseDefaultCollationWhenPresent() { + void removeShouldUseDefaultCollationWhenPresent() { template.remove(new BasicQuery("{}"), Sith.class); @@ -1444,7 +1444,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void removeShouldPreferExplicitCollationOverDefaultCollation() { + void removeShouldPreferExplicitCollationOverDefaultCollation() { template.remove(new BasicQuery("{}").collation(Collation.of("fr")), Sith.class); @@ -1456,7 +1456,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void mapReduceShouldUseDefaultCollationWhenPresent() { + void mapReduceShouldUseDefaultCollationWhenPresent() { template.mapReduce("", "", "", MapReduceOptions.options(), Sith.class); @@ -1464,7 +1464,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-1854 - public void mapReduceShouldPreferExplicitCollationOverDefaultCollation() { + void mapReduceShouldPreferExplicitCollationOverDefaultCollation() { template.mapReduce("", "", "", MapReduceOptions.options().collation(Collation.of("fr")), Sith.class); @@ -1472,7 +1472,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void saveShouldInvokeCallbacks() { + void saveShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -1490,7 +1490,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void insertShouldInvokeCallbacks() { + void insertShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -1508,7 +1508,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void insertAllShouldInvokeCallbacks() { + void insertAllShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -1530,7 +1530,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void findAndReplaceShouldInvokeCallbacks() { + void findAndReplaceShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -1548,7 +1548,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void publishesEventsAndEntityCallbacksInOrder() { + void publishesEventsAndEntityCallbacksInOrder() { BeforeConvertCallback beforeConvertCallback = new BeforeConvertCallback() { @@ -1607,7 +1607,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void beforeSaveCallbackAllowsTargetDocumentModifications() { + void beforeSaveCallbackAllowsTargetDocumentModifications() { BeforeSaveCallback beforeSaveCallback = new BeforeSaveCallback() { @@ -1638,7 +1638,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2307 - public void beforeSaveCallbackAllowsTargetEntityModificationsUsingSave() { + void beforeSaveCallbackAllowsTargetEntityModificationsUsingSave() { StaticApplicationContext ctx = new StaticApplicationContext(); ctx.registerBean(BeforeSaveCallback.class, this::beforeSaveCallbackReturningNewPersonWithTransientAttribute); @@ -1656,7 +1656,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2307 - public void beforeSaveCallbackAllowsTargetEntityModificationsUsingInsert() { + void beforeSaveCallbackAllowsTargetEntityModificationsUsingInsert() { StaticApplicationContext ctx = new StaticApplicationContext(); ctx.registerBean(BeforeSaveCallback.class, this::beforeSaveCallbackReturningNewPersonWithTransientAttribute); @@ -1676,12 +1676,12 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { // TODO: additional tests for what is when saved. @Test // DATAMONGO-2261 - public void entityCallbacksAreNotSetByDefault() { + void entityCallbacksAreNotSetByDefault() { Assertions.assertThat(ReflectionTestUtils.getField(template, "entityCallbacks")).isNull(); } @Test // DATAMONGO-2261 - public void entityCallbacksShouldBeInitiatedOnSettingApplicationContext() { + void entityCallbacksShouldBeInitiatedOnSettingApplicationContext() { ApplicationContext ctx = new StaticApplicationContext(); template.setApplicationContext(ctx); @@ -1690,7 +1690,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void setterForEntityCallbackOverridesContextInitializedOnes() { + void setterForEntityCallbackOverridesContextInitializedOnes() { ApplicationContext ctx = new StaticApplicationContext(); template.setApplicationContext(ctx); @@ -1702,7 +1702,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2261 - public void setterForApplicationContextShouldNotOverrideAlreadySetEntityCallbacks() { + void setterForApplicationContextShouldNotOverrideAlreadySetEntityCallbacks() { EntityCallbacks callbacks = EntityCallbacks.create(); ApplicationContext ctx = new StaticApplicationContext(); @@ -1714,7 +1714,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFind() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFind() { template.find(new Query().slaveOk(), AutogenerateableId.class); @@ -1722,7 +1722,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindOne() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindOne() { template.findOne(new Query().slaveOk(), AutogenerateableId.class); @@ -1730,7 +1730,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindDistinct() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindDistinct() { template.findDistinct(new Query().slaveOk(), "name", AutogenerateableId.class, String.class); @@ -1738,14 +1738,14 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForStream() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForStream() { template.stream(new Query().slaveOk(), AutogenerateableId.class); verify(collection).withReadPreference(eq(ReadPreference.primaryPreferred())); } @Test // DATAMONGO-2331 - public void updateShouldAllowAggregationExpressions() { + void updateShouldAllowAggregationExpressions() { AggregationUpdate update = AggregationUpdate.update().set("total") .toValue(ArithmeticOperators.valueOf("val1").sum().and("val2")); @@ -1761,7 +1761,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldAllowMultipleAggregationExpressions() { + void updateShouldAllowMultipleAggregationExpressions() { AggregationUpdate update = AggregationUpdate.update() // .set("average").toValue(ArithmeticOperators.valueOf("tests").avg()) // @@ -1789,7 +1789,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldMapAggregationExpressionToDomainType() { + void updateShouldMapAggregationExpressionToDomainType() { AggregationUpdate update = AggregationUpdate.update().set("name") .toValue(ArithmeticOperators.valueOf("val1").sum().and("val2")); @@ -1805,7 +1805,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldPassOnUnsetCorrectly() { + void updateShouldPassOnUnsetCorrectly() { SetOperation setOperation = SetOperation.builder().set("status").toValue("Modified").and().set("comments") .toValue(Fields.fields("misc1").and("misc2").asList()); @@ -1825,7 +1825,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldMapAggregationUnsetToDomainType() { + void updateShouldMapAggregationUnsetToDomainType() { AggregationUpdate update = AggregationUpdate.update(); update.unset("name"); @@ -1932,150 +1932,136 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2479 - public void findShouldInvokeAfterConvertCallback() { + void findShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(findIterable.iterator()).thenReturn(new OneElementCursor<>(document)); template.find(new Query(), Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); - } - - private Document initialLukeDocument() { - return new Document(ImmutableMap.of( - "_id", "init", - "firstname", "luke" - )); - } - - private Person initialLuke() { - Person expectedEnitty = new Person(); - expectedEnitty.id = "init"; - expectedEnitty.firstname = "luke"; - return expectedEnitty; + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findByIdShouldInvokeAfterConvertCallback() { + void findByIdShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(findIterable.first()).thenReturn(document); template.findById("init", Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findOneShouldInvokeAfterConvertCallback() { + void findOneShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(findIterable.first()).thenReturn(document); template.findOne(new Query(), Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findAllShouldInvokeAfterConvertCallback() { + void findAllShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(findIterable.iterator()).thenReturn(new OneElementCursor<>(document)); template.findAll(Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findAndModifyShouldInvokeAfterConvertCallback() { + void findAndModifyShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndUpdate(any(Bson.class), any(Bson.class), any())).thenReturn(document); template.findAndModify(new Query(), new Update(), Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findAndRemoveShouldInvokeAfterConvertCallback() { + void findAndRemoveShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndDelete(any(Bson.class), any())).thenReturn(document); template.findAndRemove(new Query(), Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findAllAndRemoveShouldInvokeAfterConvertCallback() { + void findAllAndRemoveShouldInvokeAfterConvertCallback() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(findIterable.iterator()).thenReturn(new OneElementCursor<>(document)); template.findAllAndRemove(new Query(), Person.class); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); } @Test // DATAMONGO-2479 - public void findAndReplaceShouldInvokeAfterConvertCallbacks() { + void findAndReplaceShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback)); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndReplace(any(Bson.class), any(Document.class), any())).thenReturn(document); Person saved = template.findAndReplace(new Query(), entity); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(saved.id).isEqualTo("after-convert"); } @Test // DATAMONGO-2479 - public void saveShouldInvokeAfterSaveCallbacks() { + void saveShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback)); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); Person saved = template.save(entity); @@ -2084,13 +2070,13 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2479 - public void insertShouldInvokeAfterSaveCallbacks() { + void insertShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback)); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); Person saved = template.insert(entity); @@ -2099,7 +2085,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2479 - public void insertAllShouldInvokeAfterSaveCallbacks() { + void insertAllShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); @@ -2120,25 +2106,25 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { } @Test // DATAMONGO-2479 - public void findAndReplaceShouldInvokeAfterSaveCallbacks() { + void findAndReplaceShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback)); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndReplace(any(Bson.class), any(Document.class), any())).thenReturn(document); Person saved = template.findAndReplace(new Query(), entity); - verify(afterSaveCallback).onAfterSave(eq(initialLuke()), any(), anyString()); + verify(afterSaveCallback).onAfterSave(eq(new Person("init", "luke")), any(), anyString()); assertThat(saved.id).isEqualTo("after-save"); } @Test // DATAMONGO-2479 - public void findAndReplaceShouldEmitAfterSaveEvent() { + void findAndReplaceShouldEmitAfterSaveEvent() { AbstractMongoEventListener eventListener = new AbstractMongoEventListener() { @@ -2156,9 +2142,9 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { template.setApplicationContext(ctx); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndReplace(any(Bson.class), any(Document.class), any())).thenReturn(document); Person saved = template.findAndReplace(new Query(), entity); @@ -2197,6 +2183,8 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { @Data @org.springframework.data.mongodb.core.mapping.Document(collection = "star-wars") + @AllArgsConstructor + @NoArgsConstructor static class Person { @Id String id; @@ -2350,10 +2338,12 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { public Person onAfterSave(Person entity, Document document, String collection) { capture(entity); - return new Person() {{ - id = "after-save"; - firstname = entity.firstname; - }}; + return new Person() { + { + id = "after-save"; + firstname = entity.firstname; + } + }; } } @@ -2364,10 +2354,12 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { public Person onAfterConvert(Person entity, Document document, String collection) { capture(entity); - return new Person() {{ - id = "after-convert"; - firstname = entity.firstname; - }}; + return new Person() { + { + id = "after-convert"; + firstname = entity.firstname; + } + }; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java index f95c5fe67..506a4e9e2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java @@ -20,7 +20,9 @@ import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; import static org.springframework.data.mongodb.test.util.Assertions.assertThat; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -86,7 +88,6 @@ import org.springframework.lang.Nullable; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.CollectionUtils; -import com.google.common.collect.ImmutableMap; import com.mongodb.MongoClientSettings; import com.mongodb.ReadPreference; import com.mongodb.client.model.CountOptions; @@ -120,7 +121,7 @@ import com.mongodb.reactivestreams.client.MongoDatabase; @MockitoSettings(strictness = Strictness.LENIENT) public class ReactiveMongoTemplateUnitTests { - ReactiveMongoTemplate template; + private ReactiveMongoTemplate template; @Mock SimpleReactiveMongoDatabaseFactory factory; @Mock MongoClient mongoClient; @@ -136,12 +137,12 @@ public class ReactiveMongoTemplateUnitTests { @Mock Publisher deletePublisher; @Mock MapReducePublisher mapReducePublisher; - MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator(); - MappingMongoConverter converter; - MongoMappingContext mappingContext; + private MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator(); + private MappingMongoConverter converter; + private MongoMappingContext mappingContext; @BeforeEach - public void beforeEach() { + void beforeEach() { when(factory.getExceptionTranslator()).thenReturn(exceptionTranslator); when(factory.getCodecRegistry()).thenReturn(MongoClientSettings.getDefaultCodecRegistry()); @@ -187,23 +188,23 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1444 - public void rejectsNullDatabaseName() { + void rejectsNullDatabaseName() { assertThatIllegalArgumentException().isThrownBy(() -> new ReactiveMongoTemplate(mongoClient, null)); } @Test // DATAMONGO-1444 - public void rejectsNullMongo() { + void rejectsNullMongo() { assertThatIllegalArgumentException().isThrownBy(() -> new ReactiveMongoTemplate(null, "database")); } @Test // DATAMONGO-1444 - public void defaultsConverterToMappingMongoConverter() throws Exception { + void defaultsConverterToMappingMongoConverter() throws Exception { ReactiveMongoTemplate template = new ReactiveMongoTemplate(mongoClient, "database"); assertThat(ReflectionTestUtils.getField(template, "mongoConverter") instanceof MappingMongoConverter).isTrue(); } @Test // DATAMONGO-1912 - public void autogeneratesIdForMap() { + void autogeneratesIdForMap() { ReactiveMongoTemplate template = spy(this.template); doReturn(Mono.just(new ObjectId())).when(template).saveDocument(any(String.class), any(Document.class), @@ -217,7 +218,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1311 - public void executeQueryShouldUseBatchSizeWhenPresent() { + void executeQueryShouldUseBatchSizeWhenPresent() { when(findPublisher.batchSize(anyInt())).thenReturn(findPublisher); @@ -228,7 +229,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void findShouldUseCollationWhenPresent() { + void findShouldUseCollationWhenPresent() { template.find(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class).subscribe(); @@ -237,7 +238,7 @@ public class ReactiveMongoTemplateUnitTests { // @Test // DATAMONGO-1518 - public void findOneShouldUseCollationWhenPresent() { + void findOneShouldUseCollationWhenPresent() { template.findOne(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class).subscribe(); @@ -245,7 +246,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void existsShouldUseCollationWhenPresent() { + void existsShouldUseCollationWhenPresent() { template.exists(new BasicQuery("{}").collation(Collation.of("fr")), AutogenerateableId.class).subscribe(); @@ -253,7 +254,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void findAndModfiyShoudUseCollationWhenPresent() { + void findAndModfiyShoudUseCollationWhenPresent() { when(collection.findOneAndUpdate(any(Bson.class), any(Bson.class), any())).thenReturn(Mono.empty()); @@ -267,7 +268,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void findAndRemoveShouldUseCollationWhenPresent() { + void findAndRemoveShouldUseCollationWhenPresent() { when(collection.findOneAndDelete(any(Bson.class), any())).thenReturn(Mono.empty()); @@ -280,7 +281,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void findAndRemoveManyShouldUseCollationWhenPresent() { + void findAndRemoveManyShouldUseCollationWhenPresent() { when(collection.deleteMany(any(Bson.class), any())).thenReturn(Mono.empty()); @@ -294,7 +295,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void updateOneShouldUseCollationWhenPresent() { + void updateOneShouldUseCollationWhenPresent() { when(collection.updateOne(any(Bson.class), any(Bson.class), any())).thenReturn(Mono.empty()); @@ -308,7 +309,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void updateManyShouldUseCollationWhenPresent() { + void updateManyShouldUseCollationWhenPresent() { when(collection.updateMany(any(Bson.class), any(Bson.class), any())).thenReturn(Mono.empty()); @@ -323,7 +324,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518 - public void replaceOneShouldUseCollationWhenPresent() { + void replaceOneShouldUseCollationWhenPresent() { when(collection.replaceOne(any(Bson.class), any(), any(ReplaceOptions.class))).thenReturn(Mono.empty()); @@ -337,7 +338,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518, DATAMONGO-2257 - public void mapReduceShouldUseCollationWhenPresent() { + void mapReduceShouldUseCollationWhenPresent() { template.mapReduce(new BasicQuery("{}"), AutogenerateableId.class, AutogenerateableId.class, "", "", MapReduceOptions.options().collation(Collation.of("fr"))).subscribe(); @@ -346,7 +347,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1518, DATAMONGO-2264 - public void geoNearShouldUseCollationWhenPresent() { + void geoNearShouldUseCollationWhenPresent() { NearQuery query = NearQuery.near(0D, 0D).query(new BasicQuery("{}").collation(Collation.of("fr"))); template.geoNear(query, AutogenerateableId.class).subscribe(); @@ -355,7 +356,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719 - public void appliesFieldsWhenInterfaceProjectionIsClosedAndQueryDoesNotDefineFields() { + void appliesFieldsWhenInterfaceProjectionIsClosedAndQueryDoesNotDefineFields() { template.doFind("star-wars", new Document(), new Document(), Person.class, PersonProjection.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -364,7 +365,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719 - public void doesNotApplyFieldsWhenInterfaceProjectionIsClosedAndQueryDefinesFields() { + void doesNotApplyFieldsWhenInterfaceProjectionIsClosedAndQueryDefinesFields() { template.doFind("star-wars", new Document(), new Document("bar", 1), Person.class, PersonProjection.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -373,7 +374,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719 - public void doesNotApplyFieldsWhenInterfaceProjectionIsOpen() { + void doesNotApplyFieldsWhenInterfaceProjectionIsOpen() { template.doFind("star-wars", new Document(), new Document(), Person.class, PersonSpELProjection.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -382,7 +383,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719, DATAMONGO-2041 - public void appliesFieldsToDtoProjection() { + void appliesFieldsToDtoProjection() { template.doFind("star-wars", new Document(), new Document(), Person.class, Jedi.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -391,7 +392,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719 - public void doesNotApplyFieldsToDtoProjectionWhenQueryDefinesFields() { + void doesNotApplyFieldsToDtoProjectionWhenQueryDefinesFields() { template.doFind("star-wars", new Document(), new Document("bar", 1), Person.class, Jedi.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -400,7 +401,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719 - public void doesNotApplyFieldsWhenTargetIsNotAProjection() { + void doesNotApplyFieldsWhenTargetIsNotAProjection() { template.doFind("star-wars", new Document(), new Document(), Person.class, Person.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -409,7 +410,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1719 - public void doesNotApplyFieldsWhenTargetExtendsDomainType() { + void doesNotApplyFieldsWhenTargetExtendsDomainType() { template.doFind("star-wars", new Document(), new Document(), Person.class, PersonExtended.class, FindPublisherPreparer.NO_OP_PREPARER).subscribe(); @@ -418,7 +419,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1783 - public void countShouldUseSkipFromQuery() { + void countShouldUseSkipFromQuery() { template.count(new Query().skip(10), Person.class, "star-wars").subscribe(); @@ -429,7 +430,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1783 - public void countShouldUseLimitFromQuery() { + void countShouldUseLimitFromQuery() { template.count(new Query().limit(100), Person.class, "star-wars").subscribe(); @@ -440,7 +441,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2360 - public void countShouldApplyQueryHintIfPresent() { + void countShouldApplyQueryHintIfPresent() { Document queryHint = new Document("age", 1); template.count(new Query().withHint(queryHint), Person.class, "star-wars").subscribe(); @@ -452,7 +453,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2365 - public void countShouldApplyQueryHintAsIndexNameIfPresent() { + void countShouldApplyQueryHintAsIndexNameIfPresent() { template.count(new Query().withHint("idx-1"), Person.class, "star-wars").subscribe(); @@ -463,7 +464,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2215 - public void updateShouldApplyArrayFilters() { + void updateShouldApplyArrayFilters() { template.updateFirst(new BasicQuery("{}"), new Update().set("grades.$[element]", 100).filterArray(Criteria.where("element").gte(100)), @@ -477,7 +478,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2215 - public void findAndModifyShouldApplyArrayFilters() { + void findAndModifyShouldApplyArrayFilters() { template.findAndModify(new BasicQuery("{}"), new Update().set("grades.$[element]", 100).filterArray(Criteria.where("element").gte(100)), @@ -491,7 +492,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findShouldNotUseCollationWhenNoDefaultPresent() { + void findShouldNotUseCollationWhenNoDefaultPresent() { template.find(new BasicQuery("{'foo' : 'bar'}"), Jedi.class).subscribe(); @@ -499,7 +500,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findShouldUseDefaultCollationWhenPresent() { + void findShouldUseDefaultCollationWhenPresent() { template.find(new BasicQuery("{'foo' : 'bar'}"), Sith.class).subscribe(); @@ -507,7 +508,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findOneShouldUseDefaultCollationWhenPresent() { + void findOneShouldUseDefaultCollationWhenPresent() { template.findOne(new BasicQuery("{'foo' : 'bar'}"), Sith.class).subscribe(); @@ -515,7 +516,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void existsShouldUseDefaultCollationWhenPresent() { + void existsShouldUseDefaultCollationWhenPresent() { template.exists(new BasicQuery("{}"), Sith.class).subscribe(); @@ -523,7 +524,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findAndModfiyShoudUseDefaultCollationWhenPresent() { + void findAndModfiyShoudUseDefaultCollationWhenPresent() { template.findAndModify(new BasicQuery("{}"), new Update(), Sith.class).subscribe(); @@ -535,7 +536,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findAndRemoveShouldUseDefaultCollationWhenPresent() { + void findAndRemoveShouldUseDefaultCollationWhenPresent() { template.findAndRemove(new BasicQuery("{}"), Sith.class).subscribe(); @@ -547,7 +548,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldNotCollationIfNotPresent() { + void createCollectionShouldNotCollationIfNotPresent() { template.createCollection(AutogenerateableId.class).subscribe(); @@ -558,7 +559,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldApplyDefaultCollation() { + void createCollectionShouldApplyDefaultCollation() { template.createCollection(Sith.class).subscribe(); @@ -570,7 +571,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldFavorExplicitOptionsOverDefaultCollation() { + void createCollectionShouldFavorExplicitOptionsOverDefaultCollation() { template.createCollection(Sith.class, CollectionOptions.just(Collation.of("en_US"))).subscribe(); @@ -582,7 +583,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void createCollectionShouldUseDefaultCollationIfCollectionOptionsAreNull() { + void createCollectionShouldUseDefaultCollationIfCollectionOptionsAreNull() { template.createCollection(Sith.class, null).subscribe(); @@ -594,7 +595,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void aggreateShouldUseDefaultCollationIfPresent() { + void aggreateShouldUseDefaultCollationIfPresent() { template.aggregate(newAggregation(Sith.class, project("id")), AutogenerateableId.class, Document.class).subscribe(); @@ -602,7 +603,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void aggreateShouldUseCollationFromOptionsEvenIfDefaultCollationIsPresent() { + void aggreateShouldUseCollationFromOptionsEvenIfDefaultCollationIsPresent() { template .aggregate( @@ -615,7 +616,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2153 - public void aggregateShouldHonorOptionsComment() { + void aggregateShouldHonorOptionsComment() { AggregationOptions options = AggregationOptions.builder().comment("expensive").build(); @@ -626,7 +627,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2390 - public void aggregateShouldNoApplyZeroOrNegativeMaxTime() { + void aggregateShouldNoApplyZeroOrNegativeMaxTime() { template .aggregate(newAggregation(MongoTemplateUnitTests.Sith.class, project("id")).withOptions( @@ -643,7 +644,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2390 - public void aggregateShouldApplyMaxTimeIfSet() { + void aggregateShouldApplyMaxTimeIfSet() { template .aggregate( @@ -656,7 +657,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findAndReplaceShouldUseCollationWhenPresent() { + void findAndReplaceShouldUseCollationWhenPresent() { template.findAndReplace(new BasicQuery("{}").collation(Collation.of("fr")), new Jedi()).subscribe(); @@ -667,7 +668,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findAndReplaceShouldUseDefaultCollationWhenPresent() { + void findAndReplaceShouldUseDefaultCollationWhenPresent() { template.findAndReplace(new BasicQuery("{}"), new Sith()).subscribe(); @@ -678,7 +679,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findAndReplaceShouldUseCollationEvenIfDefaultCollationIsPresent() { + void findAndReplaceShouldUseCollationEvenIfDefaultCollationIsPresent() { template.findAndReplace(new BasicQuery("{}").collation(Collation.of("fr")), new MongoTemplateUnitTests.Sith()) .subscribe(); @@ -690,7 +691,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findDistinctShouldUseDefaultCollationWhenPresent() { + void findDistinctShouldUseDefaultCollationWhenPresent() { template.findDistinct(new BasicQuery("{}"), "name", Sith.class, String.class).subscribe(); @@ -698,7 +699,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void findDistinctPreferCollationFromQueryOverDefaultCollation() { + void findDistinctPreferCollationFromQueryOverDefaultCollation() { template.findDistinct(new BasicQuery("{}").collation(Collation.of("fr")), "name", Sith.class, String.class) .subscribe(); @@ -707,7 +708,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void updateFirstShouldUseDefaultCollationWhenPresent() { + void updateFirstShouldUseDefaultCollationWhenPresent() { template.updateFirst(new BasicQuery("{}"), Update.update("foo", "bar"), Sith.class).subscribe(); @@ -719,7 +720,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void updateFirstShouldPreferExplicitCollationOverDefaultCollation() { + void updateFirstShouldPreferExplicitCollationOverDefaultCollation() { template.updateFirst(new BasicQuery("{}").collation(Collation.of("fr")), Update.update("foo", "bar"), Sith.class) .subscribe(); @@ -732,7 +733,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void updateMultiShouldUseDefaultCollationWhenPresent() { + void updateMultiShouldUseDefaultCollationWhenPresent() { template.updateMulti(new BasicQuery("{}"), Update.update("foo", "bar"), Sith.class).subscribe(); @@ -744,7 +745,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void updateMultiShouldPreferExplicitCollationOverDefaultCollation() { + void updateMultiShouldPreferExplicitCollationOverDefaultCollation() { template.updateMulti(new BasicQuery("{}").collation(Collation.of("fr")), Update.update("foo", "bar"), Sith.class) .subscribe(); @@ -757,7 +758,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void removeShouldUseDefaultCollationWhenPresent() { + void removeShouldUseDefaultCollationWhenPresent() { template.remove(new BasicQuery("{}"), Sith.class).subscribe(); @@ -769,7 +770,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-1854 - public void removeShouldPreferExplicitCollationOverDefaultCollation() { + void removeShouldPreferExplicitCollationOverDefaultCollation() { template.remove(new BasicQuery("{}").collation(Collation.of("fr")), Sith.class).subscribe(); @@ -781,7 +782,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void saveShouldInvokeCallbacks() { + void saveShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -799,7 +800,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void insertShouldInvokeCallbacks() { + void insertShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -817,7 +818,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void insertAllShouldInvokeCallbacks() { + void insertAllShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -839,7 +840,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void findAndReplaceShouldInvokeCallbacks() { + void findAndReplaceShouldInvokeCallbacks() { ValueCapturingBeforeConvertCallback beforeConvertCallback = spy(new ValueCapturingBeforeConvertCallback()); ValueCapturingBeforeSaveCallback beforeSaveCallback = spy(new ValueCapturingBeforeSaveCallback()); @@ -857,12 +858,12 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void entityCallbacksAreNotSetByDefault() { + void entityCallbacksAreNotSetByDefault() { Assertions.assertThat(ReflectionTestUtils.getField(template, "entityCallbacks")).isNull(); } @Test // DATAMONGO-2261 - public void entityCallbacksShouldBeInitiatedOnSettingApplicationContext() { + void entityCallbacksShouldBeInitiatedOnSettingApplicationContext() { ApplicationContext ctx = new StaticApplicationContext(); template.setApplicationContext(ctx); @@ -871,7 +872,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void setterForEntityCallbackOverridesContextInitializedOnes() { + void setterForEntityCallbackOverridesContextInitializedOnes() { ApplicationContext ctx = new StaticApplicationContext(); template.setApplicationContext(ctx); @@ -883,7 +884,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2261 - public void setterForApplicationContextShouldNotOverrideAlreadySetEntityCallbacks() { + void setterForApplicationContextShouldNotOverrideAlreadySetEntityCallbacks() { ReactiveEntityCallbacks callbacks = ReactiveEntityCallbacks.create(); ApplicationContext ctx = new StaticApplicationContext(); @@ -895,7 +896,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFind() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFind() { template.find(new Query().slaveOk(), AutogenerateableId.class).subscribe(); @@ -903,7 +904,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindOne() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindOne() { template.findOne(new Query().slaveOk(), AutogenerateableId.class).subscribe(); @@ -911,7 +912,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2344 - public void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindDistinct() { + void slaveOkQueryOptionShouldApplyPrimaryPreferredReadPreferenceForFindDistinct() { template.findDistinct(new Query().slaveOk(), "name", AutogenerateableId.class, String.class).subscribe(); @@ -919,7 +920,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldAllowAggregationExpressions() { + void updateShouldAllowAggregationExpressions() { AggregationUpdate update = AggregationUpdate.update().set("total") .toValue(ArithmeticOperators.valueOf("val1").sum().and("val2")); @@ -935,7 +936,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldAllowMultipleAggregationExpressions() { + void updateShouldAllowMultipleAggregationExpressions() { AggregationUpdate update = AggregationUpdate.update() // .set("average").toValue(ArithmeticOperators.valueOf("tests").avg()) // @@ -963,7 +964,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldMapAggregationExpressionToDomainType() { + void updateShouldMapAggregationExpressionToDomainType() { AggregationUpdate update = AggregationUpdate.update().set("name") .toValue(ArithmeticOperators.valueOf("val1").sum().and("val2")); @@ -979,7 +980,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldPassOnUnsetCorrectly() { + void updateShouldPassOnUnsetCorrectly() { SetOperation setOperation = SetOperation.builder().set("status").toValue("Modified").and().set("comments") .toValue(Fields.fields("misc1").and("misc2").asList()); @@ -999,7 +1000,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2331 - public void updateShouldMapAggregationUnsetToDomainType() { + void updateShouldMapAggregationUnsetToDomainType() { AggregationUpdate update = AggregationUpdate.update(); update.unset("name"); @@ -1110,163 +1111,138 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2479 - public void findShouldInvokeAfterConvertCallbacks() { + void findShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.find(Document.class)).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); - List results = template.find(new Query(), Person.class).timeout(Duration.ofSeconds(1)) - .toStream().collect(Collectors.toList()); + List results = template.find(new Query(), Person.class).timeout(Duration.ofSeconds(1)).toStream() + .collect(Collectors.toList()); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(results.get(0).id).isEqualTo("after-convert"); } - private Document initialLukeDocument() { - return new Document(ImmutableMap.of( - "_id", "init", - "firstname", "luke" - )); - } - - private Person initialLuke() { - Person expectedEnitty = new Person(); - expectedEnitty.id = "init"; - expectedEnitty.firstname = "luke"; - return expectedEnitty; - } - @Test // DATAMONGO-2479 - public void findByIdShouldInvokeAfterConvertCallbacks() { + void findByIdShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.find(any(Bson.class), eq(Document.class))).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); Person result = template.findById("init", Person.class).block(Duration.ofSeconds(1)); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(result.id).isEqualTo("after-convert"); } @Test // DATAMONGO-2479 - public void findOneShouldInvokeAfterConvertCallbacks() { + void findOneShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.find(any(Bson.class), eq(Document.class))).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); Person result = template.findOne(new Query(), Person.class).block(Duration.ofSeconds(1)); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(result.id).isEqualTo("after-convert"); } @Test // DATAMONGO-2479 - public void findAllShouldInvokeAfterConvertCallbacks() { + void findAllShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.find(Document.class)).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); - List results = template.findAll(Person.class).timeout(Duration.ofSeconds(1)) - .toStream().collect(Collectors.toList()); + List results = template.findAll(Person.class).timeout(Duration.ofSeconds(1)).toStream() + .collect(Collectors.toList()); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(results.get(0).id).isEqualTo("after-convert"); } @Test // DATAMONGO-2479 - public void findAndModifyShouldInvokeAfterConvertCallbacks() { + void findAndModifyShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndUpdate(any(Bson.class), any(Bson.class), any())).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); Person result = template.findAndModify(new Query(), new Update(), Person.class).block(Duration.ofSeconds(1)); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(result.id).isEqualTo("after-convert"); } @Test // DATAMONGO-2479 - public void findAndRemoveShouldInvokeAfterConvertCallbacks() { + void findAndRemoveShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndDelete(any(Bson.class), any())).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); Person result = template.findAndRemove(new Query(), Person.class).block(Duration.ofSeconds(1)); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(result.id).isEqualTo("after-convert"); } @Test // DATAMONGO-2479 - public void findAllAndRemoveShouldInvokeAfterConvertCallbacks() { + void findAllAndRemoveShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.find(Document.class)).thenReturn(findPublisher); - makeFindPublisherPublishJust(document); + stubFindSubscribe(document); when(collection.deleteMany(any(Bson.class), any(DeleteOptions.class))) .thenReturn(Mono.just(spy(DeleteResult.class))); List results = template.findAllAndRemove(new Query(), Person.class).timeout(Duration.ofSeconds(1)) .toStream().collect(Collectors.toList()); - verify(afterConvertCallback).onAfterConvert(eq(initialLuke()), eq(document), anyString()); + verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(document), anyString()); assertThat(results.get(0).id).isEqualTo("after-convert"); } - private void makeFindPublisherPublishJust(Document document) { - - Publisher realPublisher = Flux.just(document); - - doAnswer(invocation -> { - Subscriber subscriber = invocation.getArgument(0); - realPublisher.subscribe(subscriber); - return null; - }).when(findPublisher).subscribe(any()); - } - @Test // DATAMONGO-2479 - public void findAndReplaceShouldInvokeAfterConvertCallbacks() { + void findAndReplaceShouldInvokeAfterConvertCallbacks() { ValueCapturingAfterConvertCallback afterConvertCallback = spy(new ValueCapturingAfterConvertCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterConvertCallback)); when(collection.findOneAndReplace(any(Bson.class), any(Document.class), any())).thenReturn(findPublisher); - makeFindPublisherPublishJust(initialLukeDocument()); + stubFindSubscribe(new Document("_id", "init").append("firstname", "luke")); Person entity = new Person(); entity.id = "init"; @@ -1279,7 +1255,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2479 - public void saveShouldInvokeAfterSaveCallbacks() { + void saveShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); @@ -1288,7 +1264,7 @@ public class ReactiveMongoTemplateUnitTests { when(collection.replaceOne(any(Bson.class), any(Document.class), any(ReplaceOptions.class))) .thenReturn(Mono.just(mock(UpdateResult.class))); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); Person saved = template.save(entity).block(Duration.ofSeconds(1)); @@ -1297,7 +1273,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2479 - public void insertShouldInvokeAfterSaveCallbacks() { + void insertShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); @@ -1305,7 +1281,7 @@ public class ReactiveMongoTemplateUnitTests { when(collection.insertOne(any())).thenReturn(Mono.just(mock(InsertOneResult.class))); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); Person saved = template.insert(entity).block(Duration.ofSeconds(1)); @@ -1314,7 +1290,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2479 - public void insertAllShouldInvokeAfterSaveCallbacks() { + void insertAllShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); @@ -1333,9 +1309,8 @@ public class ReactiveMongoTemplateUnitTests { return Flux.fromIterable(list).map(i -> mock(InsertManyResult.class)); }); - List saved = template.insertAll(Arrays.asList(entity1, entity2)) - .timeout(Duration.ofSeconds(1)) - .toStream().collect(Collectors.toList()); + List saved = template.insertAll(Arrays.asList(entity1, entity2)).timeout(Duration.ofSeconds(1)).toStream() + .collect(Collectors.toList()); verify(afterSaveCallback, times(2)).onAfterSave(any(), any(), anyString()); assertThat(saved.get(0).id).isEqualTo("after-save"); @@ -1343,16 +1318,16 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2479 - public void findAndReplaceShouldInvokeAfterSaveCallbacks() { + void findAndReplaceShouldInvokeAfterSaveCallbacks() { ValueCapturingAfterSaveCallback afterSaveCallback = spy(new ValueCapturingAfterSaveCallback()); template.setEntityCallbacks(ReactiveEntityCallbacks.create(afterSaveCallback)); when(collection.findOneAndReplace(any(Bson.class), any(Document.class), any())).thenReturn(findPublisher); - makeFindPublisherPublishJust(initialLukeDocument()); + stubFindSubscribe(new Document("_id", "init").append("firstname", "luke")); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); Person saved = template.findAndReplace(new Query(), entity).block(Duration.ofSeconds(1)); @@ -1361,7 +1336,7 @@ public class ReactiveMongoTemplateUnitTests { } @Test // DATAMONGO-2479 - public void findAndReplaceShouldEmitAfterSaveEvent() { + void findAndReplaceShouldEmitAfterSaveEvent() { AbstractMongoEventListener eventListener = new AbstractMongoEventListener() { @@ -1379,9 +1354,9 @@ public class ReactiveMongoTemplateUnitTests { template.setApplicationContext(ctx); - Person entity = initialLuke(); + Person entity = new Person("init", "luke"); - Document document = initialLukeDocument(); + Document document = new Document("_id", "init").append("firstname", "luke"); when(collection.findOneAndReplace(any(Bson.class), any(Document.class), any())).thenReturn(Mono.just(document)); Person saved = template.findAndReplace(new Query(), entity).block(Duration.ofSeconds(1)); @@ -1389,8 +1364,21 @@ public class ReactiveMongoTemplateUnitTests { assertThat(saved.id).isEqualTo("after-save-event"); } + private void stubFindSubscribe(Document document) { + + Publisher realPublisher = Flux.just(document); + + doAnswer(invocation -> { + Subscriber subscriber = invocation.getArgument(0); + realPublisher.subscribe(subscriber); + return null; + }).when(findPublisher).subscribe(any()); + } + @Data @org.springframework.data.mongodb.core.mapping.Document(collection = "star-wars") + @AllArgsConstructor + @NoArgsConstructor static class Person { @Id String id; @@ -1472,7 +1460,7 @@ public class ReactiveMongoTemplateUnitTests { return Mono.just(entity); } } - + static class ValueCapturingAfterConvertCallback extends ValueCapturingEntityCallback implements ReactiveAfterConvertCallback { @@ -1480,10 +1468,12 @@ public class ReactiveMongoTemplateUnitTests { public Mono onAfterConvert(Person entity, Document document, String collection) { capture(entity); - return Mono.just(new Person() {{ - id = "after-convert"; - firstname = entity.firstname; - }}); + return Mono.just(new Person() { + { + id = "after-convert"; + firstname = entity.firstname; + } + }); } } @@ -1494,10 +1484,12 @@ public class ReactiveMongoTemplateUnitTests { public Mono onAfterSave(Person entity, Document document, String collection) { capture(entity); - return Mono.just(new Person() {{ - id = "after-save"; - firstname = entity.firstname; - }}); + return Mono.just(new Person() { + { + id = "after-save"; + firstname = entity.firstname; + } + }); } } diff --git a/src/main/asciidoc/reference/mongo-entity-callbacks.adoc b/src/main/asciidoc/reference/mongo-entity-callbacks.adoc index 7576a1734..3bb2a34ea 100644 --- a/src/main/asciidoc/reference/mongo-entity-callbacks.adoc +++ b/src/main/asciidoc/reference/mongo-entity-callbacks.adoc @@ -16,6 +16,12 @@ Spring Data MongoDB uses the `EntityCallback` API for its auditing support and r | Invoked before a domain object is converted to `org.bson.Document`. | `Ordered.LOWEST_PRECEDENCE` +| Reactive/AfterConvertCallback +| `onAfterConvert(T entity, org.bson.Document target, String collection)` +| Invoked after a domain object is loaded. + +Can modify the domain object after reading it from a `org.bson.Document`. +| `Ordered.LOWEST_PRECEDENCE` + | Reactive/AuditingEntityCallback | `onBeforeConvert(Object entity, String collection)` | Marks an auditable entity _created_ or _modified_ @@ -27,5 +33,11 @@ Spring Data MongoDB uses the `EntityCallback` API for its auditing support and r Can modify the target, to be persisted, `Document` containing all mapped entity information. | `Ordered.LOWEST_PRECEDENCE` +| Reactive/AfterSaveCallback +| `onAfterSave(T entity, org.bson.Document target, String collection)` +| Invoked before a domain object is saved. + + Can modify the domain object, to be returned after save, `Document` containing all mapped entity information. +| `Ordered.LOWEST_PRECEDENCE` + |===