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 f28541075..08e8d08fe 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 @@ -1172,7 +1172,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, public UpdateResult doInCollection(MongoCollection collection) throws MongoException, DataAccessException { - Optional> entity = entityClass == null ? null + Optional> entity = entityClass == null ? Optional.empty() : getPersistentEntity(entityClass); increaseVersionForUpdateIfNecessary(entity, update); @@ -2011,7 +2011,9 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, PersistentPropertyAccessor accessor = entity.getPropertyAccessor(savedObject); Optional value = accessor.getProperty(idProp); - value.ifPresent(it -> new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, value)); + if(!value.isPresent()) { + new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, Optional.of(id)); + } }); } 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 779b69d9e..ad891b3d3 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 @@ -755,7 +755,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati final Document Document = query == null ? null : queryMapper.getMappedObject(query.getQueryObject(), - entityClass == null ? null : mappingContext.getPersistentEntity(entityClass)); + entityClass == null ? Optional.empty() : mappingContext.getPersistentEntity(entityClass)); return collection.count(Document); }); @@ -976,8 +976,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati ReactiveMongoTemplate.this.assertUpdateableIdIfNotSet(objectToSave); // Create query for entity with the id and old version - Object id = convertingAccessor.getProperty(idProperty); - Query query = new Query(Criteria.where(idProperty.getName()).is(id).and(versionProperty.getName()).is(version)); + Optional id = convertingAccessor.getProperty(idProperty); + Query query = new Query(Criteria.where(idProperty.getName()).is(id.get()).and(versionProperty.getName()).is(version.get())); // Bump version number convertingAccessor.setProperty(versionProperty, Optional.of(versionNumber.orElse(0).longValue() + 1)); @@ -1308,8 +1308,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati throw new MappingException("No id property found for object of type " + objectType); } - Object idValue = entity.get().getPropertyAccessor(object).getProperty(idProp); - return Collections.singletonMap(idProp.getFieldName(), idValue).entrySet().iterator().next(); + Optional idValue = entity.get().getPropertyAccessor(object).getProperty(idProp); + return Collections.singletonMap(idProp.getFieldName(), idValue.get()).entrySet().iterator().next(); } /** @@ -1706,7 +1706,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(savedObject.getClass()); PersistentPropertyAccessor accessor = entity.getPropertyAccessor(savedObject); - if (accessor.getProperty(idProp) != null) { + if (accessor.getProperty(idProp).isPresent()) { return; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverCallback.java index 423aacd4e..93491d496 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverCallback.java @@ -57,6 +57,6 @@ class DefaultDbRefResolverCallback implements DbRefResolverCallback { */ @Override public Object resolve(MongoPersistentProperty property) { - return resolver.getValueInternal(property, surroundingObject, evaluator, path); + return resolver.getValueInternal(property, surroundingObject, evaluator, path).orElse(null); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapper.java index 3b0f13f82..7e8fbb1ee 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapper.java @@ -35,6 +35,7 @@ import org.springframework.data.util.TypeInformation; import com.mongodb.BasicDBList; import com.mongodb.DBObject; +import org.springframework.util.ObjectUtils; /** * Default implementation of {@link MongoTypeMapper} allowing configuration of the key to lookup and store type @@ -108,10 +109,10 @@ public class DefaultMongoTypeMapper extends DefaultTypeMapper implements M for (Class restrictedType : restrictedTypes) { - Object typeAlias = getAliasFor(ClassTypeInformation.from(restrictedType)); + Alias typeAlias = getAliasFor(ClassTypeInformation.from(restrictedType)); - if (typeAlias != null) { - restrictedMappedTypes.add(typeAlias); + if (typeAlias != null && !ObjectUtils.nullSafeEquals(Alias.NONE, typeAlias) && typeAlias.getValue().isPresent()) { + restrictedMappedTypes.add(typeAlias.getValue().get()); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index d3806909e..785b2ea1e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -55,6 +55,7 @@ import org.springframework.data.mapping.model.SpELContext; import org.springframework.data.mapping.model.SpELExpressionEvaluator; import org.springframework.data.mapping.model.SpELExpressionParameterValueProvider; import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.core.convert.MongoConverters.ObjectIdToBigIntegerConverter; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.data.mongodb.core.mapping.event.AfterConvertEvent; @@ -240,7 +241,9 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } // Retrieve persistent entity info - return read((MongoPersistentEntity) mappingContext.getRequiredPersistentEntity(typeToUse), (Document) bson, + Document target = bson instanceof BasicDBObject ? new Document((BasicDBObject)bson) : (Document) bson; + + return read((MongoPersistentEntity) mappingContext.getRequiredPersistentEntity(typeToUse), target, path); } @@ -271,7 +274,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App DocumentAccessor documentAccessor = new DocumentAccessor(bson); // make sure id property is set before all other properties - Object idValue = idProperty.filter(it -> documentAccessor.hasValue(it)).map(it -> { + Optional idValue = idProperty.filter(it -> documentAccessor.hasValue(it)).map(it -> { Optional value = getValueInternal(it, bson, evaluator, path); accessor.setProperty(it, value); @@ -280,7 +283,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App }); final ObjectPath currentPath = path.push(result, entity, - idValue != null ? idProperty.map(it -> bson.get(it.getFieldName())).orElse(null) : null); + idValue.isPresent() ? idProperty.map(it -> bson.get(it.getFieldName())).orElse(null) : null); // Set properties not already set in the constructor entity.doWithProperties(new PropertyHandler() { @@ -867,7 +870,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } return dbRefResolver.createDbRef(property == null ? null : property.getDBRef(), entity, - idMapper.convertId(Optional.of(id))); + idMapper.convertId(id instanceof Optional ? (Optional)id : Optional.ofNullable(id)).orElse(null)); }).orElseThrow(() -> new MappingException("No id property found on class " + entity.getType())); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoExampleMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoExampleMapper.java index f7b80ff0b..2e5314ade 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoExampleMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoExampleMapper.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import java.util.Stack; import java.util.regex.Pattern; @@ -98,9 +99,9 @@ public class MongoExampleMapper { Document reference = (Document) converter.convertToMongoType(example.getProbe()); - Optionals.ifAllPresent(entity.getIdProperty(), // - entity.getIdentifierAccessor(example.getProbe()).getIdentifier(), // - (property, identifier) -> reference.remove(property.getFieldName())); + if(entity.getIdProperty().isPresent() && !entity.getIdentifierAccessor(example.getProbe()).getIdentifier().isPresent()) { + reference.remove(entity.getIdProperty().get().getFieldName()); + } ExampleMatcherAccessor matcherAccessor = new ExampleMatcherAccessor(example.getMatcher()); @@ -241,7 +242,7 @@ public class MongoExampleMapper { } private boolean isEmptyIdProperty(Entry entry) { - return entry.getKey().equals("_id") && entry.getValue() == null; + return entry.getKey().equals("_id") && entry.getValue() == null || entry.getValue().equals(Optional.empty()); } private void applyStringMatcher(Map.Entry entry, StringMatcher stringMatcher, boolean ignoreCase) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java index 748ecbec6..3384f94fa 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java @@ -318,11 +318,11 @@ public class QueryMapper { String inKey = valueDbo.containsField("$in") ? "$in" : "$nin"; List ids = new ArrayList(); for (Object id : (Iterable) valueDbo.get(inKey)) { - ids.add(convertId(id)); + ids.add(convertId(id).get()); } resultDbo.put(inKey, ids); } else if (valueDbo.containsField("$ne")) { - resultDbo.put("$ne", convertId(valueDbo.get("$ne"))); + resultDbo.put("$ne", convertId(valueDbo.get("$ne")).get()); } else { return getMappedObject(resultDbo, Optional.empty()); } @@ -337,18 +337,18 @@ public class QueryMapper { String inKey = valueDbo.containsKey("$in") ? "$in" : "$nin"; List ids = new ArrayList(); for (Object id : (Iterable) valueDbo.get(inKey)) { - ids.add(convertId(id)); + ids.add(convertId(id).orElse(null)); } resultDbo.put(inKey, ids); } else if (valueDbo.containsKey("$ne")) { - resultDbo.put("$ne", convertId(valueDbo.get("$ne"))); + resultDbo.put("$ne", convertId(valueDbo.get("$ne")).orElse(null)); } else { return getMappedObject(resultDbo, Optional.empty()); } return resultDbo; } else { - return convertId(value); + return convertId(value).orElse(null); } } @@ -461,7 +461,7 @@ public class QueryMapper { if (source instanceof DBRef) { DBRef ref = (DBRef) source; - return new DBRef(ref.getCollectionName(), convertId(ref.getId())); + return new DBRef(ref.getCollectionName(), convertId(ref.getId()).get()); } if (source instanceof Iterable) { @@ -538,7 +538,7 @@ public class QueryMapper { } private Optional convertId(Object id) { - return convertId(Optional.of(id)); + return convertId(Optional.ofNullable(id)); } /** @@ -857,7 +857,7 @@ public class QueryMapper { @Override public MongoPersistentEntity getPropertyEntity() { MongoPersistentProperty property = getProperty(); - return property == null ? null : mappingContext.getRequiredPersistentEntity(property); + return property == null ? null : mappingContext.getPersistentEntity(property).orElse(null); } /* diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java index a1a31e68d..0a7ce5f7d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java @@ -131,7 +131,7 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener entity) { - if (entity.findAnnotation(Document.class) != null) { + if (entity.findAnnotation(Document.class).isPresent()) { for (IndexDefinitionHolder indexToCreate : indexResolver.resolveIndexFor(entity.getTypeInformation())) { createIndex(indexToCreate); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java index 9e2721416..f089a1e73 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java @@ -261,13 +261,13 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { String propertyDotPath = (StringUtils.hasText(dotPath) ? dotPath + "." : "") + persistentProperty.getFieldName(); - Float weight = indexed != null ? indexed.get().weight() + Float weight = indexed.isPresent() ? indexed.get().weight() : (includeOptions.getParentFieldSpec() != null ? includeOptions.getParentFieldSpec().getWeight() : 1.0F); if (persistentProperty.isEntity()) { TextIndexIncludeOptions optionsForNestedType = includeOptions; - if (!IncludeStrategy.FORCE.equals(includeOptions.getStrategy()) && indexed != null) { + if (!IncludeStrategy.FORCE.equals(includeOptions.getStrategy()) && indexed.isPresent()) { optionsForNestedType = new TextIndexIncludeOptions(IncludeStrategy.FORCE, new TextIndexedFieldSpec(propertyDotPath, weight)); } @@ -281,7 +281,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { LOGGER.info(String.format("Potentially invalid index structure discovered. Breaking operation for %s.", entity.getName()), e); } - } else if (includeOptions.isForce() || indexed != null) { + } else if (includeOptions.isForce() || indexed.isPresent()) { indexDefinitionBuilder.onField(propertyDotPath, weight); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java index 0273549e5..fa7066114 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java @@ -25,6 +25,7 @@ import org.springframework.data.geo.Metric; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; /** * Builder class to build near-queries. @@ -150,8 +151,10 @@ public final class NearQuery { public NearQuery with(Pageable pageable) { Assert.notNull(pageable, "Pageable must not be 'null'."); - this.num = pageable.getOffset() + pageable.getPageSize(); - this.skip = pageable.getOffset(); + if(!ObjectUtils.nullSafeEquals(Pageable.NONE, pageable)) { + this.num = pageable.getOffset() + pageable.getPageSize(); + this.skip = pageable.getOffset(); + } return this; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java index 16d197bc9..6785709a8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java @@ -33,6 +33,7 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Order; import org.springframework.data.mongodb.InvalidMongoDbApiUsageException; import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; /** * @author Thomas Risberg @@ -151,7 +152,7 @@ public class Query { */ public Query with(Pageable pageable) { - if (pageable == null) { + if (pageable == null || ObjectUtils.nullSafeEquals(Pageable.NONE, pageable)) { return this; } @@ -169,7 +170,7 @@ public class Query { */ public Query with(Sort sort) { - if (sort == null) { + if (sort == null || ObjectUtils.nullSafeEquals(Sort.unsorted(), sort)) { return this; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java index 6906f62f5..a2eba1b3c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java @@ -68,6 +68,6 @@ public class MongoRepositoryBean extends CdiRepositoryBean { MongoOperations mongoOperations = getDependencyInstance(operations, MongoOperations.class); MongoRepositoryFactory factory = new MongoRepositoryFactory(mongoOperations); - return factory.getRepository(repositoryType, customImplementation); + return customImplementation.isPresent() ? factory.getRepository(repositoryType, customImplementation.get()) : factory.getRepository(repositoryType); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbQuery.java index e00135e47..8a8386eeb 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbQuery.java @@ -15,6 +15,7 @@ */ package org.springframework.data.mongodb.repository.support; +import org.bson.Document; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.MongoTemplate; @@ -58,7 +59,9 @@ public class SpringDataMongodbQuery extends AbstractMongodbQuery entity = mappingContext.getRequiredPersistentEntity(WithObjectMethodOverrideLazyDbRefs.class); - MongoPersistentProperty property = entity.getRequiredPersistentProperty("dbRefToConcreteTypeWithPropertyAccess"); + MongoPersistentProperty property = entity.getRequiredPersistentProperty("dbRefToPlainObject"); String idValue = new ObjectId().toString(); DBRef dbRef = converter.toDBRef(new LazyDbRefTargetPropertyAccess(idValue), property); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java index 3b706803d..c7fca8a68 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java @@ -23,6 +23,7 @@ import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.util.MongoClientVersion.*; import org.bson.Document; +import org.bson.conversions.Bson; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -56,7 +57,7 @@ public class ReflectiveDBRefResolverUnitTests { when(dbRefMock.getId()).thenReturn("id-1"); when(dbFactoryMock.getDb()).thenReturn(dbMock); when(dbMock.getCollection(eq("collection-1"), eq(Document.class))).thenReturn(collectionMock); - when(collectionMock.find(any(org.bson.Document.class))).thenReturn(fi); + when(collectionMock.find(any(Bson.class))).thenReturn(fi); when(fi.first()).thenReturn(new Document("_id", "id-1")); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/PathUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/PathUnitTests.java index 52308193a..ae79e484d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/PathUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/PathUnitTests.java @@ -39,12 +39,6 @@ public class PathUnitTests { @Mock MongoPersistentEntity entityMock; - @Before - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void setUp() { - when(entityMock.getType()).thenReturn((Class) Object.class); - } - @Test // DATAMONGO-962 public void shouldIdentifyCycleForOwnerOfSameTypeAndMatchingPath() { @@ -59,7 +53,6 @@ public class PathUnitTests { MongoPersistentProperty existing = createPersistentPropertyMock(entityMock, "foo"); MongoPersistentEntity entityOfDifferentType = Mockito.mock(MongoPersistentEntity.class); - when(entityOfDifferentType.getType()).thenReturn(String.class); MongoPersistentProperty toBeVerified = createPersistentPropertyMock(entityOfDifferentType, "foo"); assertThat(new Path(existing, "foo.bar").cycles(toBeVerified, "foo.bar.bar"), is(false)); @@ -77,7 +70,6 @@ public class PathUnitTests { MongoPersistentProperty property = Mockito.mock(MongoPersistentProperty.class); when(property.getOwner()).thenReturn(owner); - when(property.getFieldName()).thenReturn(fieldname); return property; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java index cdbe8aed6..dedba8c1a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java @@ -125,7 +125,6 @@ public class BasicMongoPersistentEntityUnitTests { BasicMongoPersistentEntity entity = new BasicMongoPersistentEntity( ClassTypeInformation.from(AnyDocument.class)); when(propertyMock.isExplicitLanguageProperty()).thenReturn(false); - when(propertyMock.getActualType()).thenReturn((Class) Number.class); entity.addPersistentProperty(propertyMock); entity.verify(); @@ -197,7 +196,6 @@ public class BasicMongoPersistentEntityUnitTests { when(propertyMock.isDbReference()).thenReturn(true); when(propertyMock.getDBRef()).thenReturn(dbRefMock); when(dbRefMock.lazy()).thenReturn(false); - when(propertyMock.getActualType()).thenReturn((Class) Class.class); entity.addPersistentProperty(propertyMock); entity.verify(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java index 55de6ca6b..1344f4a1e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java @@ -22,6 +22,7 @@ import java.util.AbstractMap; import java.util.Collections; import java.util.Locale; import java.util.Map; +import java.util.Optional; import org.junit.Rule; import org.junit.Test; @@ -64,14 +65,14 @@ public class MongoMappingContextUnitTests { public void doesNotReturnPersistentEntityForMongoSimpleType() { MongoMappingContext context = new MongoMappingContext(); - assertThat(context.getPersistentEntity(DBRef.class), is(nullValue())); + assertThat(context.getPersistentEntity(DBRef.class), is(Optional.empty())); } @Test // DATAMONGO-638 public void doesNotCreatePersistentEntityForAbstractMap() { MongoMappingContext context = new MongoMappingContext(); - assertThat(context.getPersistentEntity(AbstractMap.class), is(nullValue())); + assertThat(context.getPersistentEntity(AbstractMap.class), is(Optional.empty())); } @Test // DATAMONGO-607 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsQuery.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsQuery.java index 2308cd0fa..0d8a855e6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsQuery.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsQuery.java @@ -34,7 +34,7 @@ public class IsQuery extends TypeSafeMatcher { protected Document sort; protected Document fields; - private int skip; + private long skip; private int limit; private String hint; @@ -52,7 +52,7 @@ public class IsQuery extends TypeSafeMatcher { return this; } - public IsQuery skippig(int skip) { + public IsQuery skippig(long skip) { this.skip = skip; return this; } @@ -121,7 +121,7 @@ public class IsQuery extends TypeSafeMatcher { return false; } - if (item.getSortObject() == null && !sort.isEmpty()) { + if ((item.getSortObject() == null || item.getSortObject().isEmpty()) && !sort.isEmpty()) { if (!new IsEqual(sort).matches(item.getSortObject())) { return false; } @@ -135,7 +135,7 @@ public class IsQuery extends TypeSafeMatcher { return false; } - if (!new IsEqual(this.skip).matches(item.getSkip())) { + if (!new IsEqual(this.skip).matches(item.getSkip())) { return false; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsTextQuery.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsTextQuery.java index 4591e6e1b..094df46c4 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsTextQuery.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/IsTextQuery.java @@ -103,7 +103,7 @@ public class IsTextQuery extends IsQuery { } @Override - public IsQuery skippig(int skip) { + public IsQuery skippig(long skip) { super.skippig(skip); return this; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java index 7f909126c..51be7494f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java @@ -89,20 +89,20 @@ public class NearQueryUnitTests { Pageable pageable = new PageRequest(3, 5); NearQuery query = NearQuery.near(new Point(1, 1)).with(pageable); - assertThat(query.getSkip(), is(pageable.getPageNumber() * pageable.getPageSize())); - assertThat((Integer) query.toDocument().get("num"), is((pageable.getPageNumber() + 1) * pageable.getPageSize())); + assertThat(query.getSkip(), is((long)pageable.getPageNumber() * pageable.getPageSize())); + assertThat((Long) query.toDocument().get("num"), is((long)(pageable.getPageNumber() + 1) * pageable.getPageSize())); } @Test // DATAMONGO-445 public void shouldTakeSkipAndLimitSettingsFromGivenQuery() { int limit = 10; - int skip = 5; + long skip = 5; NearQuery query = NearQuery.near(new Point(1, 1)) .query(Query.query(Criteria.where("foo").is("bar")).limit(limit).skip(skip)); assertThat(query.getSkip(), is(skip)); - assertThat((Integer) query.toDocument().get("num"), is(limit)); + assertThat((Long) query.toDocument().get("num"), is((long)limit)); } @Test // DATAMONGO-445 @@ -114,8 +114,8 @@ public class NearQueryUnitTests { NearQuery query = NearQuery.near(new Point(1, 1)) .query(Query.query(Criteria.where("foo").is("bar")).limit(limit).skip(skip)).with(pageable); - assertThat(query.getSkip(), is(pageable.getPageNumber() * pageable.getPageSize())); - assertThat((Integer) query.toDocument().get("num"), is((pageable.getPageNumber() + 1) * pageable.getPageSize())); + assertThat(query.getSkip(), is((long)pageable.getPageNumber() * pageable.getPageSize())); + assertThat((Long) query.toDocument().get("num"), is((long)(pageable.getPageNumber() + 1) * pageable.getPageSize())); } @Test // DATAMONGO-829 @@ -133,11 +133,11 @@ public class NearQueryUnitTests { @Test // DATAMONGO-829 public void numShouldNotBeAlteredByQueryWithoutPageable() { - int num = 100; + long num = 100; NearQuery query = NearQuery.near(new Point(1, 2)); query.num(num); query.query(Query.query(Criteria.where("foo").is("bar"))); - assertThat(DocumentTestUtils.getTypedValue(query.toDocument(), "num", Integer.class), is(num)); + assertThat(DocumentTestUtils.getTypedValue(query.toDocument(), "num", Long.class), is(num)); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextQueryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextQueryTests.java index 3b2895d56..a7ed0265e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextQueryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextQueryTests.java @@ -26,6 +26,7 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import java.util.List; +import lombok.ToString; import org.bson.Document; import org.junit.Before; import org.junit.ClassRule; @@ -228,6 +229,7 @@ public class TextQueryTests extends AbstractIntegrationTests { } @org.springframework.data.mongodb.core.mapping.Document(collection = "fullTextDoc") + @ToString static class FullTextDoc { @Id String id; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index 49177d18d..4a3930796 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -109,7 +110,7 @@ public abstract class AbstractPersonRepositoryIntegrationTests { @Test public void findsPersonById() throws Exception { - assertThat(repository.findOne(dave.getId().toString()), is(dave)); + assertThat(repository.findOne(dave.getId().toString()), is(Optional.of(dave))); } @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ComplexIdRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ComplexIdRepositoryIntegrationTests.java index f2ee84c26..70a39a02b 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ComplexIdRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ComplexIdRepositoryIntegrationTests.java @@ -21,6 +21,7 @@ import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Optional; import org.hamcrest.Matchers; import org.junit.Before; @@ -106,7 +107,7 @@ public class ComplexIdRepositoryIntegrationTests { repo.save(userWithId); - assertThat(repo.findOne(id), is(userWithId)); + assertThat(repo.findOne(id), is(Optional.of(userWithId))); } @Test // DATAMONGO-1078 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiExtensionIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiExtensionIntegrationTests.java index b21ef5a19..01e156b27 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiExtensionIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiExtensionIntegrationTests.java @@ -60,7 +60,7 @@ public class CdiExtensionIntegrationTests { Person result = repository.save(person); assertThat(result, is(notNullValue())); - assertThat(repository.findOne(person.getId()).getId(), is(result.getId())); + assertThat(repository.findOne(person.getId()).get().getId(), is(result.getId())); } @Test // DATAMONGO-1017 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiPersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiPersonRepository.java index 48b1cebb1..a3a22586c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiPersonRepository.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/cdi/CdiPersonRepository.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.cdi; +import java.util.Optional; + import org.springframework.data.mongodb.repository.Person; import org.springframework.data.repository.Repository; @@ -24,5 +26,5 @@ public interface CdiPersonRepository extends Repository { Person save(Person person); - Person findOne(String id); + Optional findOne(String id); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java index 0174bc8db..a0eebd20a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java @@ -81,7 +81,8 @@ public class AbstractMongoQueryUnitTests { public void setUp() { doReturn("persons").when(persitentEntityMock).getCollection(); - doReturn(persitentEntityMock).when(mappingContextMock).getPersistentEntity(Matchers.any(Class.class)); + doReturn(Optional.of(persitentEntityMock)).when(mappingContextMock).getPersistentEntity(Mockito.any(Class.class)); + doReturn(persitentEntityMock).when(mappingContextMock).getRequiredPersistentEntity(Mockito.any(Class.class)); doReturn(Person.class).when(persitentEntityMock).getType(); DbRefResolver dbRefResolver = new DefaultDbRefResolver(mock(MongoDbFactory.class)); @@ -106,12 +107,9 @@ public class AbstractMongoQueryUnitTests { @Test // DATAMONGO-566, DATAMONGO-1040 public void testDeleteExecutionLoadsListOfRemovedDocumentsWhenReturnTypeIsCollectionLike() { - when(mongoOperationsMock.find(Matchers.any(Query.class), Matchers.any(Class.class), Matchers.anyString())) - .thenReturn(Arrays.asList(new Person(new ObjectId(new Date()), "bar"))); - createQueryForMethod("deleteByLastname", String.class).setDeleteQuery(true).execute(new Object[] { "booh" }); - verify(mongoOperationsMock, times(1)).findAllAndRemove(Matchers.any(Query.class), eq(Person.class), eq("persons")); + verify(mongoOperationsMock, times(1)).findAllAndRemove(Mockito.any(Query.class), eq(Person.class), eq("persons")); } @Test // DATAMONGO-566 @@ -200,8 +198,8 @@ public class AbstractMongoQueryUnitTests { verify(mongoOperationsMock, times(2)).find(captor.capture(), eq(Person.class), eq("persons")); - assertThat(captor.getAllValues().get(0).getSkip(), is(0)); - assertThat(captor.getAllValues().get(1).getSkip(), is(10)); + assertThat(captor.getAllValues().get(0).getSkip(), is(0L)); + assertThat(captor.getAllValues().get(1).getSkip(), is(10L)); } @Test // DATAMONGO-1057 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecutionUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecutionUnitTests.java index 9dd5a9d5d..9084fb8f8 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecutionUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecutionUnitTests.java @@ -70,7 +70,7 @@ public class ReactiveMongoQueryExecutionUnitTests { NearQuery nearQuery = queryArgumentCaptor.getValue(); assertThat(nearQuery.toDocument().get("near"), is(equalTo(Arrays.asList(1d, 2d)))); - assertThat(nearQuery.getSkip(), is(10)); + assertThat(nearQuery.getSkip(), is(10L)); assertThat(nearQuery.getMinDistance(), is(equalTo(new Distance(10)))); assertThat(nearQuery.getMaxDistance(), is(equalTo(new Distance(15)))); } @@ -91,7 +91,7 @@ public class ReactiveMongoQueryExecutionUnitTests { NearQuery nearQuery = queryArgumentCaptor.getValue(); assertThat(nearQuery.toDocument().get("near"), is(equalTo(Arrays.asList(1d, 2d)))); - assertThat(nearQuery.getSkip(), is(0)); + assertThat(nearQuery.getSkip(), is(0L)); assertThat(nearQuery.getMinDistance(), is(nullValue())); assertThat(nearQuery.getMaxDistance(), is(nullValue())); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java index 8b0c269ec..611ded4c6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java @@ -69,9 +69,6 @@ public class ReactiveStringBasedMongoQueryUnitTests { @Before public void setUp() { - - when(operations.getConverter()).thenReturn(converter); - this.converter = new MappingMongoConverter(factory, new MongoMappingContext()); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java index 15ac53445..5d1a6c668 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java @@ -74,8 +74,6 @@ public class StringBasedMongoQueryUnitTests { @Before public void setUp() { - when(operations.getConverter()).thenReturn(converter); - this.converter = new MappingMongoConverter(factory, new MongoMappingContext()); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java index 02b69769d..aa8d6d398 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java @@ -68,7 +68,7 @@ public class MongoRepositoryFactoryUnitTests { @SuppressWarnings("unchecked") public void usesMappingMongoEntityInformationIfMappingContextSet() { - when(mappingContext.getPersistentEntity(Person.class)).thenReturn(Optional.of(entity)); + when(mappingContext.getRequiredPersistentEntity(Person.class)).thenReturn(entity); when(entity.getType()).thenReturn(Person.class); MongoRepositoryFactory factory = new MongoRepositoryFactory(template); @@ -80,7 +80,7 @@ public class MongoRepositoryFactoryUnitTests { @SuppressWarnings("unchecked") public void createsRepositoryWithIdTypeLong() { - when(mappingContext.getPersistentEntity(Person.class)).thenReturn(Optional.of(entity)); + when(mappingContext.getRequiredPersistentEntity(Person.class)).thenReturn(entity); when(entity.getType()).thenReturn(Person.class); MongoRepositoryFactory factory = new MongoRepositoryFactory(template);