diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java index ebcf1a8a5..126b52f47 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/IndexInfo.java @@ -108,7 +108,7 @@ public class IndexInfo { String language = sourceDocument.containsKey("default_language") ? (String) sourceDocument.get("default_language") : ""; String partialFilter = sourceDocument.containsKey("partialFilterExpression") - ? ((Document) sourceDocument.get("partialFilterExpression")).toJson() : ""; + ? ((Document) sourceDocument.get("partialFilterExpression")).toJson() : null; IndexInfo info = new IndexInfo(indexFields, name, unique, sparse, language); info.partialFilterExpression = partialFilter; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/IndexInfoUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/IndexInfoUnitTests.java index b24a4f5ea..b12c1ee4b 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/IndexInfoUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/IndexInfoUnitTests.java @@ -15,11 +15,11 @@ */ package org.springframework.data.mongodb.core.index; -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.*; import java.util.Arrays; +import org.bson.Document; import org.junit.Test; import org.springframework.data.domain.Sort.Direction; @@ -27,9 +27,13 @@ import org.springframework.data.domain.Sort.Direction; * Unit tests for {@link IndexInfo}. * * @author Oliver Gierke + * @author Christoph Strobl */ public class IndexInfoUnitTests { + static final String ID_INDEX = "{ \"v\" : 2, \"key\" : { \"_id\" : 1 }, \"name\" : \"_id_\", \"ns\" : \"db.collection\" }"; + static final String INDEX_WITH_PARTIAL_FILTER = "{ \"v\" : 2, \"key\" : { \"k3y\" : 1 }, \"name\" : \"partial-filter-index\", \"ns\" : \"db.collection\", \"partialFilterExpression\" : { \"quantity\" : { \"$gte\" : 10 } } }"; + @Test public void isIndexForFieldsCorrectly() { @@ -37,6 +41,18 @@ public class IndexInfoUnitTests { IndexField barField = IndexField.create("bar", Direction.DESC); IndexInfo info = new IndexInfo(Arrays.asList(fooField, barField), "myIndex", false, false, ""); - assertThat(info.isIndexForFields(Arrays.asList("foo", "bar")), is(true)); + assertThat(info.isIndexForFields(Arrays.asList("foo", "bar"))).isTrue(); + } + + @Test // DATAMONGO-2170 + public void partialFilterExpressionShouldBeNullIfNotSetInSource() { + assertThat(IndexInfo.indexInfoOf(Document.parse(ID_INDEX)).getPartialFilterExpression()).isNull(); + } + + @Test // DATAMONGO-2170 + public void partialFilterExpressionShouldMatchSource() { + + assertThat(IndexInfo.indexInfoOf(Document.parse(INDEX_WITH_PARTIAL_FILTER)).getPartialFilterExpression()) + .isEqualTo("{ \"quantity\" : { \"$gte\" : 10 } }"); } }