From 25840d61fc29eb3f1858b936a2601f4451663de2 Mon Sep 17 00:00:00 2001 From: Michal Kurcius Date: Wed, 19 Aug 2020 23:08:00 +0200 Subject: [PATCH] DATAMONGO-2613 - Fix single element ArrayJsonSchemaObject to document mapping. Now toDocument calls toDocument on items correctly. Original Pull Request: #883 --- .../data/mongodb/core/schema/TypedJsonSchemaObject.java | 3 ++- .../mongodb/core/schema/JsonSchemaObjectUnitTests.java | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/TypedJsonSchemaObject.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/TypedJsonSchemaObject.java index 8f612b797..f893fb703 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/TypedJsonSchemaObject.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/TypedJsonSchemaObject.java @@ -41,6 +41,7 @@ import org.springframework.util.StringUtils; * * @author Christoph Strobl * @author Mark Paluch + * @author Michał Kurcius * @since 2.1 */ public class TypedJsonSchemaObject extends UntypedJsonSchemaObject { @@ -1194,7 +1195,7 @@ public class TypedJsonSchemaObject extends UntypedJsonSchemaObject { Document doc = new Document(super.toDocument()); if (!CollectionUtils.isEmpty(items)) { - doc.append("items", items.size() == 1 ? items.iterator().next() + doc.append("items", items.size() == 1 ? items.iterator().next().toDocument() : items.stream().map(JsonSchemaObject::toDocument).collect(Collectors.toList())); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/JsonSchemaObjectUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/JsonSchemaObjectUnitTests.java index cc69588cf..6e18e9787 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/JsonSchemaObjectUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/JsonSchemaObjectUnitTests.java @@ -22,6 +22,7 @@ import static org.springframework.data.mongodb.core.schema.JsonSchemaObject.of; import static org.springframework.data.mongodb.test.util.Assertions.*; import java.util.Arrays; +import java.util.Collections; import org.bson.Document; import org.junit.Test; @@ -33,6 +34,7 @@ import org.springframework.data.domain.Range.*; * * @author Christoph Strobl * @author Mark Paluch + * @author Michał Kurcius */ public class JsonSchemaObjectUnitTests { @@ -209,6 +211,13 @@ public class JsonSchemaObjectUnitTests { .append("items", Arrays.asList(new Document("type", "string"), new Document("type", "boolean")))); } + @Test // DATAMONGO-2613 + public void arrayObjectShouldRenderItemsCorrectlyAsObjectIfContainsOnlyOneElement() { + + assertThat(array().items(Collections.singletonList(string())).toDocument()).isEqualTo(new Document("type", "array") + .append("items", new Document("type", "string"))); + } + @Test // DATAMONGO-1835 public void arrayObjectShouldRenderMaxItemsCorrectly() {