|
33 | 33 | import org.bson.types.ObjectId;
|
34 | 34 | import org.junit.jupiter.api.BeforeEach;
|
35 | 35 | import org.junit.jupiter.api.Test;
|
36 |
| -import org.junit.jupiter.api.extension.ExtendWith; |
37 |
| -import org.mockito.Mock; |
38 |
| -import org.mockito.junit.jupiter.MockitoExtension; |
39 |
| -import org.mockito.junit.jupiter.MockitoSettings; |
40 |
| -import org.mockito.quality.Strictness; |
41 | 36 |
|
42 | 37 | import org.springframework.core.convert.converter.Converter;
|
43 | 38 | import org.springframework.data.annotation.Id;
|
44 | 39 | import org.springframework.data.convert.WritingConverter;
|
45 | 40 | import org.springframework.data.domain.Sort;
|
46 | 41 | import org.springframework.data.domain.Sort.Direction;
|
47 | 42 | import org.springframework.data.geo.Point;
|
48 |
| -import org.springframework.data.mongodb.MongoDatabaseFactory; |
49 | 43 | import org.springframework.data.mongodb.core.DocumentTestUtils;
|
50 | 44 | import org.springframework.data.mongodb.core.Person;
|
51 | 45 | import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
|
|
55 | 49 | import org.springframework.data.mongodb.core.mapping.Document;
|
56 | 50 | import org.springframework.data.mongodb.core.mapping.Field;
|
57 | 51 | import org.springframework.data.mongodb.core.mapping.FieldType;
|
| 52 | +import org.springframework.data.mongodb.core.mapping.MongoId; |
58 | 53 | import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
|
59 | 54 | import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
60 | 55 | import org.springframework.data.mongodb.core.mapping.TextScore;
|
|
77 | 72 | * @author Mark Paluch
|
78 | 73 | * @author David Julia
|
79 | 74 | */
|
80 |
| -@ExtendWith(MockitoExtension.class) |
81 |
| -@MockitoSettings(strictness = Strictness.LENIENT) |
82 | 75 | public class QueryMapperUnitTests {
|
83 | 76 |
|
84 | 77 | private QueryMapper mapper;
|
85 | 78 | private MongoMappingContext context;
|
86 | 79 | private MappingMongoConverter converter;
|
87 | 80 |
|
88 |
| - @Mock MongoDatabaseFactory factory; |
89 |
| - |
90 | 81 | @BeforeEach
|
91 | 82 | void beforeEach() {
|
92 | 83 |
|
| 84 | + MongoCustomConversions conversions = new MongoCustomConversions(); |
93 | 85 | this.context = new MongoMappingContext();
|
| 86 | + this.context.setSimpleTypeHolder(conversions.getSimpleTypeHolder()); |
94 | 87 |
|
95 |
| - this.converter = new MappingMongoConverter(new DefaultDbRefResolver(factory), context); |
| 88 | + this.converter = new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, context); |
| 89 | + this.converter.setCustomConversions(conversions); |
96 | 90 | this.converter.afterPropertiesSet();
|
97 | 91 |
|
98 | 92 | this.mapper = new QueryMapper(converter);
|
@@ -1152,6 +1146,25 @@ void allowsUsingFieldPathsForPropertiesHavingCustomConversionRegistered() {
|
1152 | 1146 | .isEqualTo(new org.bson.Document("address.street", "1007 Mountain Drive"));
|
1153 | 1147 | }
|
1154 | 1148 |
|
| 1149 | + @Test // GH-3783 |
| 1150 | + void retainsId$InWithStringArray() { |
| 1151 | + |
| 1152 | + org.bson.Document mappedQuery = mapper.getMappedObject( |
| 1153 | + org.bson.Document.parse("{ _id : { $in: [\"5b8bedceb1e0bfc07b008828\"]}}"), |
| 1154 | + context.getPersistentEntity(WithExplicitStringId.class)); |
| 1155 | + assertThat(mappedQuery.get("_id")).isEqualTo(org.bson.Document.parse("{ $in: [\"5b8bedceb1e0bfc07b008828\"]}")); |
| 1156 | + } |
| 1157 | + |
| 1158 | + @Test // GH-3783 |
| 1159 | + void mapsId$InInToObjectIds() { |
| 1160 | + |
| 1161 | + org.bson.Document mappedQuery = mapper.getMappedObject( |
| 1162 | + org.bson.Document.parse("{ _id : { $in: [\"5b8bedceb1e0bfc07b008828\"]}}"), |
| 1163 | + context.getPersistentEntity(ClassWithDefaultId.class)); |
| 1164 | + assertThat(mappedQuery.get("_id")) |
| 1165 | + .isEqualTo(org.bson.Document.parse("{ $in: [ {$oid: \"5b8bedceb1e0bfc07b008828\" } ]}")); |
| 1166 | + } |
| 1167 | + |
1155 | 1168 | class WithDeepArrayNesting {
|
1156 | 1169 |
|
1157 | 1170 | List<WithNestedArray> level0;
|
@@ -1215,6 +1228,18 @@ class Sample {
|
1215 | 1228 | @Id private String foo;
|
1216 | 1229 | }
|
1217 | 1230 |
|
| 1231 | + class WithStringId { |
| 1232 | + |
| 1233 | + @MongoId String id; |
| 1234 | + String name; |
| 1235 | + } |
| 1236 | + |
| 1237 | + class WithExplicitStringId { |
| 1238 | + |
| 1239 | + @MongoId(FieldType.STRING) String id; |
| 1240 | + String name; |
| 1241 | + } |
| 1242 | + |
1218 | 1243 | class BigIntegerId {
|
1219 | 1244 |
|
1220 | 1245 | @Id private BigInteger id;
|
|
0 commit comments