@@ -28,14 +28,15 @@ class OolongMongoSpec extends AsyncFlatSpec with ForAllTestContainer with Before
28
28
container.start()
29
29
30
30
val client = MongoClient (container.replicaSetUrl)
31
- val collection = client.getDatabase(" test" ).getCollection[BsonDocument ](" testColection " )
31
+ val collection = client.getDatabase(" test" ).getCollection[BsonDocument ](" testCollection " )
32
32
33
33
override def beforeAll (): Unit = {
34
34
val documents = List (
35
- TestClass (" 0" , 0 , InnerClass (" sdf" ), Nil ),
36
- TestClass (" 1" , 1 , InnerClass (" qwe" ), Nil ),
37
- TestClass (" 2" , 2 , InnerClass (" asd" ), Nil ),
38
- TestClass (" 3" , 12 , InnerClass (" sdf" ), Nil )
35
+ TestClass (" 0" , 0 , InnerClass (" sdf" ), List (1 , 2 ), None ),
36
+ TestClass (" 1" , 1 , InnerClass (" qwe" ), Nil , Some (2L )),
37
+ TestClass (" 2" , 2 , InnerClass (" asd" ), Nil , None ),
38
+ TestClass (" 3" , 12 , InnerClass (" sdf" ), Nil , None ),
39
+ TestClass (" 12345" , 12 , InnerClass (" sdf" ), Nil , None ),
39
40
)
40
41
41
42
implicit val ec = ExecutionContext .global
@@ -55,14 +56,14 @@ class OolongMongoSpec extends AsyncFlatSpec with ForAllTestContainer with Before
55
56
case Failure (exception) => Future .failed(exception)
56
57
case Success (value) => Future .successful(value)
57
58
}
58
- } yield assert(v == TestClass (" 1" , 1 , InnerClass (" qwe" ), Nil ))
59
+ } yield assert(v == TestClass (" 1" , 1 , InnerClass (" qwe" ), Nil , Some ( 2L ) ))
59
60
}
60
61
61
62
it should " find documents in a collection with query with runtime constant" in {
62
63
val q = query[TestClass ](_.field2 <= lift(Random .between(13 , 100 )))
63
64
for {
64
65
res <- collection.find(q).toFuture()
65
- } yield assert(res.size == 4 )
66
+ } yield assert(res.size == 5 )
66
67
}
67
68
68
69
it should " find both documents with OR operator" in {
@@ -93,7 +94,7 @@ class OolongMongoSpec extends AsyncFlatSpec with ForAllTestContainer with Before
93
94
94
95
for {
95
96
res <- collection.find(q).toFuture()
96
- } yield assert(res.size == 4 )
97
+ } yield assert(res.size == 5 )
97
98
}
98
99
99
100
it should " compile queries with `unchecked`" in {
@@ -136,6 +137,14 @@ class OolongMongoSpec extends AsyncFlatSpec with ForAllTestContainer with Before
136
137
} yield assert(res.size == 2 )
137
138
}
138
139
140
+ it should " compile queries with `.contains` #4" in {
141
+ val q = query[TestClass ](x => ! List (1 , 2 , 3 ).contains(x.field2))
142
+
143
+ for {
144
+ res <- collection.find(q).toFuture()
145
+ } yield assert(res.size == 3 )
146
+ }
147
+
139
148
it should " compile queries with nested objects" in {
140
149
val q = query[TestClass ](_.field3 == lift(InnerClass (" qwe" )))
141
150
@@ -149,33 +158,82 @@ class OolongMongoSpec extends AsyncFlatSpec with ForAllTestContainer with Before
149
158
150
159
for {
151
160
res <- collection.find(q).toFuture()
152
- } yield assert(res.size == 4 )
161
+ } yield assert(res.size == 5 )
153
162
}
154
163
155
164
it should " compile queries with `.isInstance` #2" in {
156
165
val q = query[TestClass ](_.field3.isInstanceOf [MongoType .DOCUMENT ])
157
166
158
167
for {
159
168
res <- collection.find(q).toFuture()
160
- } yield assert(res.size == 4 )
169
+ } yield assert(res.size == 5 )
161
170
}
162
171
163
- it should " compile queries with `.mod ` #1" in {
172
+ it should " compile queries with `% ` #1" in {
164
173
val q = query[TestClass ](_.field2 % 4 == 0 )
165
174
166
175
for {
167
176
res <- collection.find(q).toFuture()
168
- } yield assert(res.size == 2 )
177
+ } yield assert(res.size == 3 )
169
178
}
170
179
171
- it should " compile queries with `.mod ` #2" in {
180
+ it should " compile queries with `% ` #2" in {
172
181
val q = query[TestClass ](_.field2 % 4.99 == 0 )
173
182
183
+ for {
184
+ res <- collection.find(q).toFuture()
185
+ } yield assert(res.size == 3 )
186
+ }
187
+
188
+ it should " compile queries with $type" in {
189
+ val q = query[TestClass ](_.field2.isInstanceOf [MongoType .INT32 ])
190
+
191
+ for {
192
+ res <- collection.find(q).toFuture()
193
+ } yield assert(res.size == 5 )
194
+ }
195
+
196
+ it should " compile queries with $exists" in {
197
+ val q = query[TestClass ](_.field5.isDefined)
198
+
199
+ for {
200
+ res <- collection.find(q).toFuture()
201
+ } yield assert(res.size == 1 )
202
+ }
203
+
204
+ it should " compile queries with $regex" in {
205
+ val q = query[TestClass ](_.field1.matches(" \\ d{2,5}" ))
206
+
207
+ for {
208
+ res <- collection.find(q).toFuture()
209
+ } yield assert(res.size == 1 )
210
+ }
211
+
212
+ it should " compile queries with $size" in {
213
+ val q = query[TestClass ](_.field4.size == 2 )
214
+
215
+ for {
216
+ res <- collection.find(q).toFuture()
217
+ } yield assert(res.size == 1 )
218
+ }
219
+
220
+ it should " compile queries with $elemMatch" in {
221
+ val q = query[TestClass ](_.field2 >= 10 )
222
+
174
223
for {
175
224
res <- collection.find(q).toFuture()
176
225
} yield assert(res.size == 2 )
177
226
}
178
227
228
+ it should " compile queries with $all" in {
229
+ inline def variants = List (1 , 2 )
230
+ val q = query[TestClass ](ins => variants.forall(ins.field4.contains))
231
+
232
+ for {
233
+ res <- collection.find(q).toFuture()
234
+ } yield assert(res.size == 1 )
235
+ }
236
+
179
237
// TODO: test updates
180
238
// it should "compile updates" in {
181
239
// val upd = compileUpdate {
0 commit comments