From 433b012b9148b15232d32b07859efc0d9dcff430 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 | 8 ++++++++ 2 files changed, 10 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 a481c53c7..48e9540ec 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 { @@ -1203,7 +1204,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 8f48ddd05..3efba4f05 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 @@ -41,6 +41,7 @@ import org.springframework.data.domain.Range.*; * * @author Christoph Strobl * @author Mark Paluch + * @author Michał Kurcius */ public class JsonSchemaObjectUnitTests { @@ -269,6 +270,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() {