|
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