From 6a7c4fc17c6acf0cbc4fed2ce8f333a604b5f369 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 7 Dec 2023 09:53:54 +0100 Subject: [PATCH] Add test to verify map keys retain order when mapped. See: #4577 Original pull request: #4568 --- .../core/convert/QueryMapperUnitTests.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index 88984baa1..b0d72fd06 100755 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java @@ -28,6 +28,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.TreeMap; import org.bson.conversions.Bson; import org.bson.types.Code; @@ -1517,6 +1518,20 @@ public class QueryMapperUnitTests { assertThat(mappedObject).isEqualTo("{ 'field.name.with.dots' : 'A' }"); } + @Test // GH-4577 + void mappingShouldRetainMapKeyOrder() { + + TreeMap sourceMap = new TreeMap<>(Map.of("test1", "123", "test2", "456")); + + org.bson.Document target = mapper.getMappedObject(query(where("simpleMap").is(sourceMap)).getQueryObject(), + context.getPersistentEntity(WithSimpleMap.class)); + assertThat(target.get("simpleMap", Map.class)).containsExactlyEntriesOf(sourceMap); + } + + class WithSimpleMap { + Map simpleMap; + } + class WithDeepArrayNesting { List level0;